2012-03-05 43 views
1

我想創建一個語句級別觸發器,這意味着當一個或多個行插入到表EMP中時,我只想向表EMP_AUDIT中插入一條記錄。例如:如果我有10條記錄插入到EMP中,則只有1條記錄應插入到EMP_AUDIT表中。Oracle'語句級別'觸發器

列沒有限制。 (即可以爲NULL)

我試圖使用以下觸發器,但它給了我錯誤(2,2):PL/SQL:忽略SQL語句 錯誤(2,14):PL/SQL:ORA- 00947:沒有足夠的值

 
    CREATE OR REPLACE 
    TRIGGER TRIG_EMP AFTER INSERT ON EMP 
    BEGIN 
    INSERT INTO EMP_AUDIT 
    VALUES (TRANID,EMPNUM,SYSDATE); 
    END; 
 
    CREATE TABLE EMP 
    (TRANID NUMBER, 
    EMPNUM VARCHAR2(100), 
    EMPLOC VARCHAR2(100)); 
 
    CREATE TABLE EMP_AUDIT 
    (EVENTID NUMBER, 
    EMPNUM VARCHAR2(100), 
    ENTRDATE DATE); 
+0

烏爾觸發很好..它應該工作。檢查此鏈接觸發語法.. http://plsql-tutorial.com/plsql-triggers.htm – Teja 2012-03-05 22:26:37

+0

的事情是,如果在'價值觀'我替換列名稱EVENTID和EMPNUM爲1,'A'...它的工作原理。但它仍然在審計表中插入多個記錄。即插入到EMP表中的許多記錄數。 – user547453 2012-03-05 22:36:32

回答

3

的語句級觸發器(你有)不能看到所插入的數據。畢竟,如果插入了10行,那麼這些列應該用於審計表的哪些值?

你需要一個行級觸發這個工作,如:

CREATE OR REPLACE 
TRIGGER TRIG_EMP 
    AFTER INSERT ON EMP 
    FOR EACH ROW 
BEGIN 
    INSERT INTO EMP_AUDIT 
    VALUES (:NEW.TRANID,:NEW.EMPNUM,:NEW.SYSDATE); 
END; 
0

使用這段代碼:

CREATE OR REPLACE TRIGGER 
TRIG_EMP 
AFTER INSERT ON EMP 
FOR EACH ROW 
BEGIN 
    INSERT INTO EMP_AUDIT 
    VALUES (:NEW.TRANID,:NEW.EMPNUM,:NEW.SYSDATE); 
END;