假設您使用默認的HR
模式,觸發器編譯就好了。
C:\Users\jcave>sqlplus hr/hr
SQL*Plus: Release 11.2.0.1.0 Production on Mon Mar 18 16:55:42 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create or replace trigger check_dept
2 BEFORE INSERT ON employees
3 FOR EACH ROW
4 DECLARE
5 c number(1);
6 BEGIN
7 select count(*) INTO c from departments where departments.department_id=:new.department_id;
8
9 IF c = 0 THEN
10 insert into departments(department_id,department_name) values (:new.department_id,'others');
11 END IF;
12
13 END;
14/
Trigger created.
SQL> ed
Wrote file afiedt.buf
1 insert into employees(employee_id, first_name, last_name, email, hire_date, job_id, department_id)
2* values(-1, 'Justin', 'Cave', '[email protected]', sysdate, 'AC_ACCOUNT', 10)
SQL>/
1 row created.
如果你的觸發是無效的,或者有一些關於你的貼比觸發你實際上是在編譯或不使用默認的HR
模式在這種情況下,你需要告訴我們觸發什麼不同你的桌子看起來像。
如果您手動編譯它,會發生什麼情況?另外,你是否在employee.department_id值中插入null? – Sebas 2013-03-18 20:17:52
不,我不插入空值。當我跑這個查詢時,我沒有看到任何錯誤或者ALTER TRIGGER check_dept COMPILE; – Shamik 2013-03-18 20:30:38
是否存在缺少未插入值的部門中的空列? – Sebas 2013-03-18 20:31:56