2013-03-18 55 views
2

繼觸發,但在插入,收到錯誤「觸發無效和失敗的再驗證」不知道爲什麼觸發器無效?是越來越創建

create or replace trigger check_dept 
BEFORE INSERT ON employees 
FOR EACH ROW 
DECLARE 
c number(1); 
BEGIN 
select count(*) INTO c from departments where departments.department_id=:new.department_id; 

IF c = 0 THEN 
insert into departments(department_id,department_name) values (:new.department_id,'others'); 
END IF; 

END; 

我失去了什麼?

+0

如果您手動編譯它,會發生什麼情況?另外,你是否在employee.department_id值中插入null? – Sebas 2013-03-18 20:17:52

+0

不,我不插入空值。當我跑這個查詢時,我沒有看到任何錯誤或者ALTER TRIGGER check_dept COMPILE; – Shamik 2013-03-18 20:30:38

+0

是否存在缺少未插入值的部門中的空列? – Sebas 2013-03-18 20:31:56

回答

2

假設您使用默認的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模式在這種情況下,你需要告訴我們觸發什麼不同你的桌子看起來像。

+0

沒有這是我正在運行的確切觸發器,我正在使用默認hr模式。我只更改僱員表,使所有的職位,除了employee_id和姓氏爲空,但我不認爲這可能是這個觸發器的問題。我已經嘗試刪除這個觸發器,並再次重新創建。 – Shamik 2013-03-19 18:09:49

0

也許你需要在代碼的末尾添加'COMMIT'。

+0

這是對這個問題有用的答案。你不能在觸發器中提交,並且DDL(例如'CREATE TRIGGER')總是在Oracle中發佈提交。 – Allan 2013-03-18 21:54:38

+0

我已經設置了AutoCommit – Shamik 2013-03-19 18:10:17

0

也許是一個愚蠢的想法,但你有權訪問視圖或觸發器正在訪問的表?如果它的觀點,那麼可能是一個補助金必須被添加。

+0

我確實有訪問權限。 – Shamik 2013-03-19 18:13:45

相關問題