该数据库有两个表 - 员工和部门。当用户尝试向员工表中插入记录时,会触发一个触发器,该触发器会检查用户输入的员工编号是否存在于部门表中。如果未找到该记录,则不会将其插入到雇员表中。
不得使用主键和外键。只允许触发器。
该数据库有两个表 - 员工和部门。当用户尝试向员工表中插入记录时,会触发一个触发器,该触发器会检查用户输入的员工编号是否存在于部门表中。如果未找到该记录,则不会将其插入到雇员表中。
不得使用主键和外键。只允许触发器。
基于 Scott 的示例模式,我正在创建仅包含数据的 EMP_T 和 DEPT_T 表;没有限制。
SQL> create table emp_t as select * From emp;
Table created.
SQL> create table dept_t as select * From dept;
Table created.
扳机:
SQL> create or replace trigger trg_biu_emp_d
2 before insert or update on emp_t
3 for each row
4 declare
5 l_deptno dept_t.deptno%type;
6 begin
7 select d.deptno
8 into l_deptno
9 from dept_t d
10 where d.deptno = :new.deptno;
11 exception
12 when no_data_found then
13 raise_application_error(-20000, 'That department does not exist');
14 end;
15 /
Trigger created.
SQL>
测试:首先失败:
SQL> update emp_t set deptno = 50;
update emp_t set deptno = 50
*
ERROR at line 1:
ORA-20000: That department does not exist
ORA-06512: at "SCOTT.TRG_BIU_EMP_D", line 10
ORA-04088: error during execution of trigger 'SCOTT.TRG_BIU_EMP_D'
SQL> insert into emp_t (empno, ename, deptno) values (999, 'Littlefoot', 50);
insert into emp_t (empno, ename, deptno) values (999, 'Littlefoot', 50)
*
ERROR at line 1:
ORA-20000: That department does not exist
ORA-06512: at "SCOTT.TRG_BIU_EMP_D", line 10
ORA-04088: error during execution of trigger 'SCOTT.TRG_BIU_EMP_D'
SQL>
测试#2:成功:
SQL> update emp_t set deptno = 10;
14 rows updated.
SQL> insert into emp_t (empno, ename, deptno) values (999, 'Littlefoot', 20);
1 row created.
SQL>