Oracle 创建视图、修改表的约束 创建级联删除触发器、存储过程

1、创建视图
创建航班表的视图,用于查询航班表的所有信息

create  or replace view  F_view 
as
select * from Flight;

创建机票表的视图,用于查询机票表的所有信息

create or replace view T_view
as 
select * from Ticket;

创建用户表的视图,用于查询用户表的所有信息

create or replace view C_view
as 
select * from Client;

2、修改表的约束

修改Ticket表的外键约束,允许它们取空值

alter table Ticket modify TFid varchar2(10) null;
alter table Ticket modify TCerNumber varchar2(10) null;

(这里请注意一下,oracle里修改表的约束用了关键词modify 而SqlServser数据库里修改表的列的约束用的还是alter,具体的你们可以去百度)

3、创建级联删除触发器
创建航班触发器 用于删除机票表中外键引用航班表主键时对应的那条记录

create or replace trigger F_trigger
after delete
on  Flight
for each row
begin
delete from Ticket where Ticket.TFid  =:old.Fid;
end  F_trigger;

创建用户触发器,用于删除机票表中外键引用用户表主键时对应的那条记录

create or replace trigger C_trigger
after delete
on  Client 
for each row
begin
delete from Ticket where Ticket.TCerNumber =:old.CerNumber ;
end  C_trigger;

4、创建存储过程
4.1 创建增加存储过程
增加航班信息的存储过程

create or replace procedure inF(F_Fid in varchar,F_Fname in varchar,F_CabLevel in varchar,F_CabQuantity in Number)as
begin
insert into flight(Fid,Fname,CabLevel,CabQuantity)
values(F_Fid,F_Fname,F_CabLevel,F_CabQuantity);
commit;
end;

增加机票信息的存储过程

create or replace procedure inTi(T_Tid in varchar,T_Tprice in Number,T_Discount in number,T_Presell in varchar,T_Salesman in varchar)as
begin
insert into ticket(Tid,Tprice,Discount,Presell,Salesman)
values(T_Tid,T_Tprice,T_Discount,T_Presell,Salesman);
end;

增加用户信息的存储过程

create or replace procedure inC(C_CerNumber in varchar  ,C_Cname in varchar,C_Csex in varchar,C_Phone in Number, C_CerType in varchar,C_PayMethod in varchar)as
begin
insert into Client(CerNumber  ,Cname ,Csex,Phone , CerType,PayMethod)
values(C_CerNumber  ,C_Cname ,C_Csex,Phone , C_CerType ,C_PayMethod); 
end;

4.2 创建更新存储过程
更新航班信息存储过程

create or replace procedure upF(F_Fid in varchar,F_Fname in varchar,F_CabLevel in varchar,F_CabQuantity in Number)as
begin
update Flight set Fname = F_Fname,CabLevel =F_CabLevel,CabQuantity = F_CabQuantity
where Fid = F_Fid;
commit;
end;

更新机票信息存储过程

create or replace procedure upT(T_Tid in varchar, T_Tprice in NUMBER,T_Discount in number,T_Presell in varchar,T_Salesman in varchar)as
begin
update Ticket set Tprice = T_Tprice,Discount=T_Discount,Presell=T_Presell,Salesman=T_Salesman
where Tid = T_Tid;
commit;
end;

更新用户信息存储过程

create or replace procedure upC(T_CerNumber in varchar, T_Cname in varchar,T_Csex in varchar,T_Phone in Number, T_CerType in varchar,T_PayMethod in varchar)as
begin
update Client set Cname = T_Cname,Csex=T_Csex,Phone=T_Phone,CerType=T_CerType,PayMethod =T_PayMethod 
where CerNumber = T_CerNumber;
commit;
end;

4.3创建删除存储过程
删除航班信息存储过程

create or replace procedure delF1(Fid in varchar,Fname in varchar)as
begin
delete from Flight where Fid = Fid and Fname=Fname;
commit;
end;

删除机票信息存储过程

create or replace procedure delT1(Tid in varchar,Tprice in NUMBER)as
begin
delete from Ticket where Tid=Tid and Tprice=Tprice; 
commit;
end;

删除用户信息存储过程

create or replace procedure delC1(CerNumber in varchar,Cname in varchar)as
begin
delete from Client where CerNumber = CerNumber and Cname=Cname;
commit;
end;

注意:这里我必须说一下增加、更新它们俩和删除的有点不一样,不晓得你们发现没,但是在VS2012中测试都是没有错的。必须说一下存储过程创建过程中定义的变量名最好不要和表中数据的字段名相同,否则会优先当做字段名对待。按道理来说,删除存储过程中的变量(当时只写了一个,以主键为基础来删除字段)一开始是和表的字段名相同,所得结果是错的(本来要删除一条记录,测试结果却删除了整条记录),但我在原来的基础上,再加一个变量,却又没有出错了,虽然我也不明白他为啥在变量名与字段名相同的情况下删除成功了,但这肯定不可取,建议变量尽量不要和字段名相同

发布了20 篇原创文章 · 获赞 2 · 访问量 3826

猜你喜欢

转载自blog.csdn.net/qq_43554951/article/details/89925895