Sql 在创建简单DB2触发器时面临问题
尝试创建以下trriger:Sql 在创建简单DB2触发器时面临问题,sql,triggers,db2,Sql,Triggers,Db2,尝试创建以下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 INS
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
!
创建触发器EWR.INS\u STU
在EWR.STUDENT上插入后
每行
开始
如果(:NEW.ROLL_NO>60),则
插入EWR.STUDENT_DIV值(:NEW.ROLL_NO,'P');
如果结束;
如果(:NEW.ROLL_NO<60)
然后
插入EWR.STUDENT_DIV值(:NEW.ROLL_NO,'F');
如果结束;
结束
!
但它给出了以下错误:
DB21034E由于该命令不是SQL语句,因此将其作为SQL语句处理
有效的命令行处理器命令。在SQL处理过程中,它返回:
SQL0104N意外标记“:NEW.ROLL_NO>30)然后插入INT”是
在以下“H行开始IF”()中找到。预期标记可能包括:“”。行号=6。SQLSTATE=42601 SQL0104N意外标记“:NEW.ROLL_NO>30)然后 在H行之后找到“插入INT” 开始 IF(“。预期标记可能包括:“”
为什么要使用带有表示法的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.
创建触发器EWR.INS\u STU
在EWR.STUDENT上插入后
将新引用为新
每行
开始
如果(NEW.ROLL_NO>60),则
插入EWR.STUDENT_DIV值(新的卷号,'P');
如果结束;
如果(新卷号<60),则
插入EWR.STUDENT_DIV值(新的卷号“F”);
如果结束;
结束!
db2-td!-f trigger.sql
DB20000I SQL命令已成功完成。
我希望这能解决您的问题。您使用的是哪个数据库?