Триггер Oracle на уровне выписки - PullRequest
1 голос
/ 06 марта 2012

Я хочу создать триггер уровня оператора, что означает, что я хочу вставить только одну запись в таблицу EMP_AUDIT, когда в таблицу EMP вставлена ​​1 или более строк. Например: если в EMP вставлено 10 записей, в таблицу EMP_AUDIT должна быть вставлена ​​только 1 запись.

Нет ограничений на столбцы. (т.е. может быть 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); 

Ответы [ 2 ]

3 голосов
/ 18 октября 2012

Триггер уровня оператора (который у вас есть) не может видеть данные, которые были вставлены. В конце концов, если было вставлено 10 строк, какими значениями должны быть столбцы для вашей таблицы аудита?

Вам нужен триггер на уровне строк, чтобы это работало, например ::10000

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 голосов
/ 23 октября 2014

Используйте этот кусок кода:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...