创建一触发器,删除某货物类型,并将对应的货物信息以及进货信息一并删除

billlyh 2013-08-15 11:08:57


表结构如上图
建表语句:
/*创建供应商信息表*/
create table provider_info(
provider_id integer primary key,--主键,供应商编号
provider_name varchar2(20),--供应商名称
provider_address varchar2(20)   --供应商地址
);
/*创建供应商品信息表*/
create table provide_bale_info(
pro_id integer primary key,--主键,供应编号(不是供应商编号)
bale_amount integer,--商品数量
pro_date date,--供应日期
bale_id integer,--货物编号
provider_id integer,--供应商编号
constraint fk_pdcmcdm foreign key(bale_id) references bale_info(bale_id),
constraint fk_pdcmcdp foreign key(provider_id) references provider_info(provider_id)
);
/*创建货物信息表*/
create table bale_info(
bale_id integer primary key,--主键,货物编号
bale_name varchar2(20),--货物名称
bale_bewrite varchar2(200),--货物描述
type_id integer ,--类型编号
constraint fk_mcd foreign key(type_id) references bale_type_info(type_id)
);
/*创建货物类型表*/
create table bale_type_info(
type_id integer primary key--主键,类型编号
type_name varchar2(20),--类型名称
type_bewrite varchar2(20)--类型描述
);

...全文
253 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
billlyh 2013-08-15
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER tri_del_type BEFORE DELETE ON bale_type_info FOR EACH ROW DECLARE pragma autonomous_transaction; BEGIN EXECUTE IMMEDIATE 'alter table bale_info disable primary key cascade'; DELETE FROM provide_bale_info t WHERE t.bale_id IN(SELECT bi.bale_id FROM bale_info bi WHERE bi.type_id=:OLD.type_id); DELETE FROM bale_info t WHERE t.type_id=:old.type_id; EXECUTE IMMEDIATE 'alter table bale_info ENABLE primary KEY'; EXCEPTION WHEN OTHERS THEN dbms_output.put_line(Sqlerrm); END; 加入pragma autonomous_transaction;这个语句,报错 ora-04031
yinan9 2013-08-15
  • 打赏
  • 举报
回复
哥们,很简单的触发器,有时间的话自己琢磨一下吧,更利于自己提高
billlyh 2013-08-15
  • 打赏
  • 举报
回复
yinan9 你的方案是对的,确实用自治事务之后,就能使用DDL语句了

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧