oracle总结8
来源:互联网 发布:手机打开mobi软件 编辑:程序博客网 时间:2024/06/05 23:39
建立用于操作ORDERS表的包pkg_orders,并调用该包的公用过程和函数。实现的规则:
1.定义私有函数fun_valid_cust,检查客户号是否在CUSTOMER表中存在;如果客户号存在,则返回TRUE,否则返回FALSE。
2.定义公用过程pro_add_order,根据输入的订单号,预定日期,客户编号,交付日期,订单总价为ORDERS表增加订单。如果订单存在,则显示自定义错误信息“ORA-20001:the order already exist,please check order no.”,如果客户号不存在,则显示自定义错误信息,“ORA-20002:the customer is not exist,please check customer no.”,如果交付日期小于预定日期,则显示自定义错误信息“ORA-20003,ship_date must large order_date .”
3.定义公用过程pro_update_shipdate,根据输入的订单号和交付日期,更新特定订单的交付日期。如果订单不存在,则显示自定义错误信息“ORA-20004,please input correct order no.”,如果交付日期小于预定日期,则显示自定义错误信息“ORA-20003,ship_date must large order_date .”
4.定义公用函数fun_get_info,根据输入的订单号返回客户名和订单总价。如果订单不存在,则显示自定义错误信息“ORA-20004,please input correct order no.”,
5.定义公用过程pro_delete_order,根据输入的订单号取消特定订单。如果订单不存在,则显示自定义错误信息“ORA-20004,please input correct order no.”,
-----
表设计字段
ORDERS表字段为order_id, order_date, customer_id, ship_date, total;数据来自oe.orders,主键为order_id
CUSTOMER表字段为customer_id, cust_first_name, cust_last_name, date_of_birth, marital_status, cust_email,city_name数据来自oe.customers,主键为customer_id
ORDERS表与CUSTOMER为多对1关系,需要用建立主外键约束关系。
======解锁oe
SQL> alter user oe account unlock;
SQL> alter user oe identified by oe;
SQL> grant dba to oe;
---table:orders
create table orders(order_id number primary key
, order_date date
, customer_id number
, ship_date date
, total number);
---table:customer
create table customer as
select a.customer_id
,a.cust_first_name
,a.cust_last_name
,a.date_of_birth
,a.marital_status
,a.cust_email
,a.cust_address.city city_name
from oe.customers a;
---add primary and foreign key
alter table customer add constraint pk_customer primary key(customer_id);
alter table orders add constraint fk_orders foreign key(customer_id)
references customer(customer_id);
---向orders表中插入数据
INSERT INTO ORDERS
(
ORDER_ID,
ORDER_DATE,
CUSTOMER_ID,
SHIP_DATE,
TOTAL
)
select b.order_id
,b.order_date
,b.customer_id
,add_months(b.order_date,2)
,b.order_total
from oe.orders b;
---------------------------------------------
---package header:
create or replace package pkg_orders is
procedure pro_add_order(v_order_id number,
v_order_date date,
v_customer_id number,
v_ship_date date,
v_total number);
procedure pro_update_shipdate(v_order_id number,v_ship_date date);
function fun_get_info(v_order_id number) return varchar2;
procedure pro_delete_order(v_order_id number);
end pkg_orders;
---------------------------------------------
--- body:pkg_orders
create or replace package body pkg_orders is
function fun_valid_cust(v_customer_id number)
return boolean is
v_tmp number;
begin
select 1 into v_tmp from customer where customer_id = v_customer_id;
return true;
exception
when no_data_found then
return false;
end;
procedure pro_add_order(v_order_id number,
v_order_date date,
v_customer_id number,
v_ship_date date,
v_total number)
is
begin
if not fun_valid_cust(v_customer_id) then
raise_application_error(-20002, 'the customer is not exist,please check customer no.');
end if;
if v_ship_date < v_order_date then
raise_application_error(-20003,'ship_date must large order_date');
end if;
insert into orders values(v_order_id
,v_order_date
,v_customer_id
,v_ship_date
,v_total);
exception when dup_val_on_index then
raise_application_error(-20001,'the order already exist,please check order no');
end;
procedure pro_update_shipdate(v_order_id number,v_ship_date date)
is
v_order_date date;
begin
update orders set ship_date=v_ship_date
where order_id = v_order_id
returning order_date into v_order_date;
if sql%notfound then
raise_application_error(-20004,'please input correct order no');
end if;
if v_ship_date < v_order_date then
rollback;
raise_application_error(-20003,'ship_date must large order_date');
end if;
end;
function fun_get_info(v_order_id number) return varchar2
is
v_info varchar2(100);
begin
select b.cust_last_name||' '||b.cust_first_name || ':' || a.total into v_info
from orders a
join customer b on a.customer_id = b.customer_id
where a.order_id = v_order_id;
return v_info;
exception
when no_data_found then
raise_application_error(-20004,'please input correct order no');
end;
procedure pro_delete_order(v_order_id number)
is
begin
delete from orders where order_id = v_order_id;
if sql%notfound then
raise_application_error(-20004,'please input correct order no');
end if;
end;
end pkg_orders;
---------------------------------------------
=============
学生课程案例
t_student(student_id number not null primary key
,student_name varchar2(50)
,phone varchar2(15));
t_student_teacher(student_id number not null
,teacher_id number not null
,constraint pk_student_teacher primary key(student_id,teacher_id));
alter table t_student_teacher add constraint fk_student1 foreign key(student_id) references t_student(student_id);
alter table t_student_teacher add constraint fk_teacher_id foreign key(teacher_id) references t_teacher(teacher_id);
t_teacher(teacher_id number not null primary key
,teacher_name varchar2(50)
,phone varchar2(15));
t_student_course(student_id number not null
,course_id number not null
,grade number(5,2)
,constraint pk_student_course_id primary key(student_id,course_id));
---编写外键约束
alter table t_student_course add constraint fk_student_courser_id foreign key(student_id) references t_student(student_id);
alter table t_student_course add constraint fk_student_courser2_id foreign key(course_id) references t_course(course_id );
t_course(course_id number not null primary key,
course_name varchar2(50));
1.定义私有函数fun_valid_cust,检查客户号是否在CUSTOMER表中存在;如果客户号存在,则返回TRUE,否则返回FALSE。
2.定义公用过程pro_add_order,根据输入的订单号,预定日期,客户编号,交付日期,订单总价为ORDERS表增加订单。如果订单存在,则显示自定义错误信息“ORA-20001:the order already exist,please check order no.”,如果客户号不存在,则显示自定义错误信息,“ORA-20002:the customer is not exist,please check customer no.”,如果交付日期小于预定日期,则显示自定义错误信息“ORA-20003,ship_date must large order_date .”
3.定义公用过程pro_update_shipdate,根据输入的订单号和交付日期,更新特定订单的交付日期。如果订单不存在,则显示自定义错误信息“ORA-20004,please input correct order no.”,如果交付日期小于预定日期,则显示自定义错误信息“ORA-20003,ship_date must large order_date .”
4.定义公用函数fun_get_info,根据输入的订单号返回客户名和订单总价。如果订单不存在,则显示自定义错误信息“ORA-20004,please input correct order no.”,
5.定义公用过程pro_delete_order,根据输入的订单号取消特定订单。如果订单不存在,则显示自定义错误信息“ORA-20004,please input correct order no.”,
-----
表设计字段
ORDERS表字段为order_id, order_date, customer_id, ship_date, total;数据来自oe.orders,主键为order_id
CUSTOMER表字段为customer_id, cust_first_name, cust_last_name, date_of_birth, marital_status, cust_email,city_name数据来自oe.customers,主键为customer_id
ORDERS表与CUSTOMER为多对1关系,需要用建立主外键约束关系。
======解锁oe
SQL> alter user oe account unlock;
SQL> alter user oe identified by oe;
SQL> grant dba to oe;
---table:orders
create table orders(order_id number primary key
, order_date date
, customer_id number
, ship_date date
, total number);
---table:customer
create table customer as
select a.customer_id
,a.cust_first_name
,a.cust_last_name
,a.date_of_birth
,a.marital_status
,a.cust_email
,a.cust_address.city city_name
from oe.customers a;
---add primary and foreign key
alter table customer add constraint pk_customer primary key(customer_id);
alter table orders add constraint fk_orders foreign key(customer_id)
references customer(customer_id);
---向orders表中插入数据
INSERT INTO ORDERS
(
ORDER_ID,
ORDER_DATE,
CUSTOMER_ID,
SHIP_DATE,
TOTAL
)
select b.order_id
,b.order_date
,b.customer_id
,add_months(b.order_date,2)
,b.order_total
from oe.orders b;
---------------------------------------------
---package header:
create or replace package pkg_orders is
procedure pro_add_order(v_order_id number,
v_order_date date,
v_customer_id number,
v_ship_date date,
v_total number);
procedure pro_update_shipdate(v_order_id number,v_ship_date date);
function fun_get_info(v_order_id number) return varchar2;
procedure pro_delete_order(v_order_id number);
end pkg_orders;
---------------------------------------------
--- body:pkg_orders
create or replace package body pkg_orders is
function fun_valid_cust(v_customer_id number)
return boolean is
v_tmp number;
begin
select 1 into v_tmp from customer where customer_id = v_customer_id;
return true;
exception
when no_data_found then
return false;
end;
procedure pro_add_order(v_order_id number,
v_order_date date,
v_customer_id number,
v_ship_date date,
v_total number)
is
begin
if not fun_valid_cust(v_customer_id) then
raise_application_error(-20002, 'the customer is not exist,please check customer no.');
end if;
if v_ship_date < v_order_date then
raise_application_error(-20003,'ship_date must large order_date');
end if;
insert into orders values(v_order_id
,v_order_date
,v_customer_id
,v_ship_date
,v_total);
exception when dup_val_on_index then
raise_application_error(-20001,'the order already exist,please check order no');
end;
procedure pro_update_shipdate(v_order_id number,v_ship_date date)
is
v_order_date date;
begin
update orders set ship_date=v_ship_date
where order_id = v_order_id
returning order_date into v_order_date;
if sql%notfound then
raise_application_error(-20004,'please input correct order no');
end if;
if v_ship_date < v_order_date then
rollback;
raise_application_error(-20003,'ship_date must large order_date');
end if;
end;
function fun_get_info(v_order_id number) return varchar2
is
v_info varchar2(100);
begin
select b.cust_last_name||' '||b.cust_first_name || ':' || a.total into v_info
from orders a
join customer b on a.customer_id = b.customer_id
where a.order_id = v_order_id;
return v_info;
exception
when no_data_found then
raise_application_error(-20004,'please input correct order no');
end;
procedure pro_delete_order(v_order_id number)
is
begin
delete from orders where order_id = v_order_id;
if sql%notfound then
raise_application_error(-20004,'please input correct order no');
end if;
end;
end pkg_orders;
---------------------------------------------
=============
学生课程案例
t_student(student_id number not null primary key
,student_name varchar2(50)
,phone varchar2(15));
t_student_teacher(student_id number not null
,teacher_id number not null
,constraint pk_student_teacher primary key(student_id,teacher_id));
alter table t_student_teacher add constraint fk_student1 foreign key(student_id) references t_student(student_id);
alter table t_student_teacher add constraint fk_teacher_id foreign key(teacher_id) references t_teacher(teacher_id);
t_teacher(teacher_id number not null primary key
,teacher_name varchar2(50)
,phone varchar2(15));
t_student_course(student_id number not null
,course_id number not null
,grade number(5,2)
,constraint pk_student_course_id primary key(student_id,course_id));
---编写外键约束
alter table t_student_course add constraint fk_student_courser_id foreign key(student_id) references t_student(student_id);
alter table t_student_course add constraint fk_student_courser2_id foreign key(course_id) references t_course(course_id );
t_course(course_id number not null primary key,
course_name varchar2(50));
0 0
- oracle总结8
- Oracle总结
- Oracle 总结
- Oracle总结
- oracle总结
- oracle总结
- Oracle 总结
- Oracle 总结
- oracle总结
- Oracle-总结
- Oracle总结
- Oracle总结
- Oracle总结
- oracle总结
- oracle总结
- Oracle总结
- oracle 总结
- Oracle总结
- 百度面试题:一个单链表,长度未知,如何快速的找出位于中间的那个元素
- c++builder怎么像c#那样快速找到某个控件?
- 数据结构值行逻辑链接表实现矩阵运算(参考整理严蔚敏数据结构)
- oracle总结7
- 初探Oracle:Oracle 9i 的安装文件下载和安装过程中遇到的问题
- oracle总结8
- oracle database link小结
- 邮票分你一半
- storm源代码之tuple是如何发送的
- sdut 5-3 多级派生类的构造函数
- JavaWeb编码和乱码解决方法
- select函数实现无阻塞的连接、接收、输入发送
- 新做了几个网站,欢迎光顾
- JavaWeb:Tomcat下配置数据源(JNDI)连接数据库