2013-04-19 2 views
0

Пробовал создать следующую trriger:Облицовочные проблемы при создании простого триггера DB2

CREATE TRIGGER EWR.INS_STU 
AFTER INSERT ON EWR.STUDENT 
    FOR EACH ROW 
BEGIN 
    IF (:NEW.ROLL_NO > 60) THEN 
     INSERT INTO EWR.STUDENT_DIV VALUES (:NEW.ROLL_NO,'P'); 
    END IF; 

    IF(:NEW.ROLL_NO < 60) 
    THEN 
    INSERT INTO EWR.STUDENT_DIV VALUES (:NEW.ROLL_NO,'F'); 
    END IF; 
END 
! 

Но это дает следующее сообщение об ошибке:

DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0104N An unexpected token ":NEW.ROLL_NO > 30) THEN INSERT INT" was found following "H ROW BEGIN IF (". Expected tokens may include:
"". LINE NUMBER=6. SQLSTATE=42601

SQL0104N An unexpected token ":NEW.ROLL_NO > 30) THEN INSERT INT" was found following "H ROW BEGIN IF (". Expected tokens may include: "".

+0

В какой базе данных у вас есть? –

ответ

2

Почему вы используете NEW с обозначением в качестве хоста переменная (:)? Вам не нужно указывать двоеточие перед именем переменной, потому что это триггер, который использует только sql (sql pl).

Кроме того, вы должны объявить, как вы собираетесь ссылаться на новые значения, определенные в заголовке.

REFERENCING NEW AS N 

Я воссоздал свое дело, и это работает для меня, как это:

db2 "create table ewr.student(roll_no int)" 
db2 "create table ewr.student_div(roll_no int, other char(1))" 

trigger.sql

CREATE TRIGGER EWR.INS_STU 
    AFTER INSERT ON EWR.STUDENT 
    REFERENCING NEW AS NEW 
    FOR EACH ROW 
BEGIN 
    IF (NEW.ROLL_NO > 60) THEN 
    INSERT INTO EWR.STUDENT_DIV VALUES (NEW.ROLL_NO, 'P'); 
    END IF; 
    IF (NEW.ROLL_NO < 60) THEN 
    INSERT INTO EWR.STUDENT_DIV VALUES (NEW.ROLL_NO, 'F'); 
    END IF; 
END ! 

db2 -td! -f trigger.sql 
DB20000I The SQL command completed successfully. 

Я надеюсь, что это решит вашу проблему.

+0

yupp это сработало для меня также..thnks AngocA .. :) – JITSU83

Смежные вопросы