1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Oracle 创建视图 修改表的约束 创建级联删除触发器 存储过程

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

时间:2019-05-23 21:44:57

相关推荐

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

1、创建视图

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

create or replace view F_view asselect * from Flight;

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

create or replace view T_viewas select * from Ticket;

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

create or replace view C_viewas 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_triggerafter deleteon Flightfor each rowbegindelete from Ticket where Ticket.TFid =:old.Fid;end F_trigger;

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

create or replace trigger C_triggerafter deleteon Client for each rowbegindelete 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)asbegininsert 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)asbegininsert 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)asbegininsert 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)asbeginupdate Flight set Fname = F_Fname,CabLevel =F_CabLevel,CabQuantity = F_CabQuantitywhere 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)asbeginupdate Ticket set Tprice = T_Tprice,Discount=T_Discount,Presell=T_Presell,Salesman=T_Salesmanwhere 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)asbeginupdate 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)asbegindelete from Flight where Fid = Fid and Fname=Fname;commit;end;

删除机票信息存储过程

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

删除用户信息存储过程

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。