0

该数据库有两个表 - 员工和部门。当用户尝试向员工表中插入记录时,会触发一个触发器,该触发器会检查用户输入的员工编号是否存在于部门表中。如果未找到该记录,则不会将其插入到雇员表中。

不得使用主键和外键。只允许触发器。

4

1 回答 1

0

基于 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> 
于 2019-10-27T09:37:15.840 回答