2013-05-05 1 views
0
CREATE TABLE "EMPLOYEE_BP" 
    ( "EMP_ID" VARCHAR2(10) NOT NULL ENABLE, 
"FNAME" VARCHAR2(20), 
"LNAME" VARCHAR2(20), 
"JOB_ROLE" VARCHAR2(20), 
"AIRPORT_CODE" VARCHAR2(10) NOT NULL ENABLE, 
"SALARY" NUMBER(9,0), 
"MOBILE" NUMBER(10,0) 
); 

CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON EMPLOYEE 
FOR EACH ROW 
DECLARE 
BEGIN 
INSERT INTO EMPLOYEE_BP values (:NEW.EMP_ID, :NEW.FNAME, :NEW.LNAME, :NEW.JOB_ROLE, : NEW.AIRPORT_CODE, : NEW.SALARY, : NEW.MOBILE); 
DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table'); 
END; 

--> Apparently constraints are not inserted into backup tables 

Таблица создается, но это дает мне ошибку для триггера в строке 4, где указан оператор begin. Ошибка ther ошибки в строке 4 игнорируется. Синтаксис кажется одобренным, и я уверен, что это небольшая ошибка, но я не могу понять это. Я использую Oracle.После обновления триггера вставки

Заранее спасибо.

+0

заявление игнорировали это не ошибка, это является следствием ошибки. – Sebas

ответ

3

Запуск триггера, как вы есть, я на самом деле получить внутренний Oracle ошибка, которая не является хорошей. Но я думаю, что проблема заключается в том, что у вас есть промежутки между : и NEW.

Это работает для меня:

SQL> CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON EMPLOYEE 
    2 FOR EACH ROW 
    3 DECLARE 
    4 BEGIN 
    5 INSERT INTO EMPLOYEE_BP values (:NEW.EMP_ID, :NEW.FNAME, :NEW.LNAME, :NEW.JOB_ROLE, :NEW.AIRPORT_CODE, :NEW.SALARY, :NEW.MOBILE); 
    6 DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table'); 
    7 END; 
    8/

Trigger created. 
+0

+1: Я также получаю внутреннюю ошибку PLS-00801 при компиляции триггера, который исчезает, когда я удаляю пробелы между ':' и 'NEW'. –

1

Я не эксперт Oracle, но вы либо должны поразить DECLARE линию или на самом деле объявить что-то на основе этого example

CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON EMPLOYEE 
FOR EACH ROW 
DECLARE 
    unused varchar2(10); 
BEGIN 
INSERT INTO EMPLOYEE_BP values (:NEW.EMP_ID, :NEW.FNAME, :NEW.LNAME, :NEW.JOB_ROLE, :NEW.AIRPORT_CODE, :NEW.SALARY, :NEW.MOBILE); 
DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table'); 
END; 
+0

все испробовал, пришел к выводу, что свободный versioin Oracle просто глючит, некоторые операторы работают в командном терминале, другие работают в скрипте и другие в sql-команде. Спасибо, в любом случае. –