oracle - Raise_application_error() 会停止执行吗?(停止在表中插入/删除/更新)
问题描述
Raise_application_error() 使用“删除前”触发器可以防止和停止从表中删除?
解决方案
是的,raise_application_error可以防止和停止删除。考虑以下示例:
SQL> desc emp
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4)
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y
SQL> create or replace trigger trg_del_emp
2 before delete on emp
3 for each row
4 declare
5 begin
6 if ( :old.deptno = 10 ) then
7 raise_application_error(-20222,'Records with Deptno=10 can not be deleted!');
8 end if;
9 end;
10 /
Trigger created
SQL> insert all
2 into emp values(7782,'CLARK','MANAGER',7839, date'1981-06-09',2450.00,null,10)
3 into emp values(7788,'SCOTT','ANALYST',7566, date'1987-04-19',3000.00,null,20)
4 select * from dual;
2 rows inserted
SQL> delete emp where empno = 7782;
delete emp where empno = 7782
ORA-20222: Records with Deptno=10 can not be deleted
ORA-06512: at "HR.TRG_DEL_EMP", line 4
ORA-04088: error during execution of trigger 'HR.TRG_DEL_EMP'
SQL> delete emp where empno = 7788;
1 row deleted
SQL> rollback;
Rollback complete
推荐阅读
- java - How to use multiple methods for a string
- python - PyTorch [1 if x > 0.5 else 0 for x in outputs ] with tensors
- http-status-code-403 - 当我尝试在没有 www 的情况下访问我的网站时被禁止 403
- php - json_decode url instagram 使用 PHP 代码返回 Null
- python - 如何使用列表切片来完成此操作?
- r - 并行抓取 Reddit 数据
- react-native - 当我尝试导航到其他屏幕时,屏幕安装两次
- python-3.x - 从 py 文件生成 exe 后的问题
- android - 在cmd中签署apk ionic android的问题
- python-3.x - 数组的词干和词形还原