oracle触发器阻止删除数据

chen_xiangguo 2010-06-15 05:03:12
我的触发器原型:
表t1,只有一个字段id number类型的

create or replace trigger triiger_delete_users
before delete on t1
for each row
begin
//此处要求不要删除数据,阻止接下来的删除
end triiger_delete_users;

也说是说,删除前,经过此触发器后,不执行以下的
delete t1 where id=?了
求高手!
...全文
1490 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingjin520 2010-06-18
  • 打赏
  • 举报
回复
想到一个方法,用instead trigger,TRIGGER里的代码来代替这个DML动作,也就是DML不会真正的执行.但这个trigger是建在view上的,所以,首先要建个view,以后的操作也是基于这个view

create view v_t1 as select * from t1;

create or replace TRIGGER v_t1_trigger
instead of delete
ON V_T1
FOR EACH ROW
BEGIN
dbms_output.PUT_LINE('Could not delete');--如果你什么也不想输出,这里写 null;
END;

--test
delete from v_t1 where id = 44;
1 rows deleted
Could not delete

--还会发现,直接从表里删也是不行的,会报错
delete from t1 where id = 44;
Error starting at line 1 in command:
.....
vber1010 2010-06-17
  • 打赏
  • 举报
回复
简单。加一句:
:new.id=100000000000;--赋值一个 不存在的ID
longfeih 2010-06-17
  • 打赏
  • 举报
回复
不是太明白楼主的意思 不过可以用insert重新插入
chen_xiangguo 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 java3344520 的回复:]

raise_application_error(异常类型,传递信息)

异常类型:number() 值域:-20000 到-20999


raise_application_error(-200001,'不允许删除数据!');
刚才的RAISE多了个L....
[/Quote]
这是报错的,我想让它不显示错误,可不可以,就是它以为执行正确了,其实没执行。。
不显示错误信息可以吗
iqlife 2010-06-15
  • 打赏
  • 举报
回复
raise_application_error(异常类型,传递信息)

异常类型:number() 值域:-20000 到-20999


raise_application_error(-200001,'不允许删除数据!');
刚才的RAISE多了个L....
iqlife 2010-06-15
  • 打赏
  • 举报
回复
railse_application_error(-200001,'不允许删除数据!');
晕倒,少了个负号
chen_xiangguo 2010-06-15
  • 打赏
  • 举报
回复
顶顶顶顶
chen_xiangguo 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java3344520 的回复:]

railse_application_error(200001,'不允许删除数据!');
应该这样写。。
[/Quote]
楼上的,不行呀,这是错误信息
2/4 PLS-00201: identifier 'RAILSE_APPLICATION_ERROR' must be declared
iqlife 2010-06-15
  • 打赏
  • 举报
回复
railse_application_error(200001,'不允许删除数据!');
应该这样写。。
iqlife 2010-06-15
  • 打赏
  • 举报
回复
RAISE_APPLICATION('200001','不允许删除数据!');
chen_xiangguo 2010-06-15
  • 打赏
  • 举报
回复
顶顶顶顶
chen_xiangguo 2010-06-15
  • 打赏
  • 举报
回复
顶顶顶顶

17,086

社区成员

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

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