db2 运行代码时出现结构化查询语言错误

t1rydlwq  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(248)

当我尝试运行下面的代码时;我收到以下错误。

CREATE PROCEDURE proc_test
    (IN roger_value INT, dd VARCHAR(100), way_id INT)
LANGUAGE SQL MODIFIES SQL DATA
    INSERT INTO testall
    VALUES
        (000, roger_value, dd, 777, way_id);

CREATE TRIGGER test1
AFTER INSERT ON testall
FOR EACH ROW mode DB2SQL
UPDATE testall
SET     way_out = way_out + 1,
        way_in = way_in + 1;

CREATE TRIGGER test2
AFTER INSERT ON testall
FOR EACH ROW mode DB2SQL
DELETE FROM testfirst
WHERE (SELECT testfirst.roger_value FROM testfirst) = (SELECT testall.roger_value FROM testall);  

CALL proc_test(999, 'testvalue', 8888) ;

Status:
Failed
Error message
An error occurred in a triggered SQL statement in trigger "schema111.test2".  Information returned for the error includes SQLCODE "-811", SQLSTATE "21000" and message tokens "".. SQLCODE=-723, SQLSTATE=09000, DRIVER=4.27.25

我不知道发生了什么事后,尝试了许多网站,但仍然没有答案。有人能帮助吗?

vsikbqxv

vsikbqxv1#

如果我猜对了你的意图,请做以下更改:
1.使用关键字new来引用要插入的行
1.修正语法
应用这些点将进行删除:

DELETE FROM testfirst
WHERE roger_value = NEW.roger_value;
vcudknz3

vcudknz32#

如果目标是从testfirst中删除所有行,这些行的ROGER_VALUE值与插入到testall中的行的ROGER_VALUE值相同,则:

CREATE OR REPLACE TRIGGER test2
AFTER INSERT ON testall
REFERENCING NEW AS N
FOR EACH ROW mode DB2SQL
DELETE FROM testfirst F
WHERE F.ROGER_VALUE = N.ROGER_VALUE

如果目标是仅更新插入行中的某些值(而不是所有表行中的值),则:

CREATE TRIGGER test1
BEFORE INSERT ON testall
REFERENCING NEW AS N
FOR EACH ROW mode DB2SQL
SET     way_out = N.way_out + 1,
        way_in = N.way_in + 1

相关问题