试图创建以下trriger:
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该命令作为SQL语句处理,因为它不是 有效的命令行处理器命令。在SQL处理期间,它返回: SQL0104N意外的令牌&#34;:NEW.ROLL_NO&gt; 30)然后插入INT&#34;是 发现以下&#34; H ROW BEGIN IF(&#34;。预期的代币可能包括:
&#34;&#34 ;. LINE NUMBER = 6。 SQLSTATE = 42601SQL0104N意外的令牌&#34;:NEW.ROLL_NO&gt; 30)然后 INSERT INT&#34;被发现在&#34; H ROW之后 开始 IF(&#34;。预期的代币可能包括:&#34;&#34;。
答案 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.
我希望这可以解决你的问题。