SQL 代码 SQL DB2 语法问题中的触发器

Triggers in SQL syntax issue in code SQL DB2

问题:

我的代码在到达最后一行之前一直有效,然后抛出语法错误。

错误:

DB21034E 命令作为 SQL 语句处理,因为它不是 有效的命令行处理器命令。在 SQL 处理期间,它返回: SQL0104N 在“(case when”之后发现了意外标记 "temp_dept"。 预期的令牌可能包括:"JOIN"。 SQL状态=42601

我正在尝试这样做:

代码:

create trigger RD_total_dep_emp \
after insert on RD_Emp \
referencing new table as temp_dept
for each statement \
   insert into RD_Supervisor(RD_E_SUP, RD_E_EMP, RD_QUOT) \
   select temp_dept.RD_E_ID, 
       (case \
         when temp_dept.RD_E_ID <= 0 then 0 \
         when temp_dept.RD_E_ID > 0 AND temp_dept.RD_E_ID <= 15 then 15 \
         when temp_dept.RD_E_ID > 15 AND temp_dept.RD_E_ID <= 25 then 25 \
         when temp_dept.RD_E_ID > 25 AND temp_dept.RD_E_ID <= 35 then 35 \
         when temp_dept.RD_E_ID > 35 then 100 \ 
        end) as RD_E_SUP \ 
   from temp_dept        

您在 CASE 之前有一个左括号,但在 END 之后没有一个右括号。

https://xkcd.com/859/

您在 insert 中有三列,但在 select 中只有两列 -- 而且它们的顺序似乎有误。以下可能更符合你的意图:

create trigger RD_total_dep_emp \
after insert on RD_Emp \
referencing new table as temp_dept
for each statement \
   insert into RD_Supervisor(RD_E_EMP, RD_E_SUP) \
       select temp_dept.RD_E_ID, 
           (case \
             when temp_dept.RD_E_ID <= 0 then 0 \
             when temp_dept.RD_E_ID > 0 AND temp_dept.RD_E_ID <= 15 then 15 \
             when temp_dept.RD_E_ID > 15 AND temp_dept.RD_E_ID <= 25 then 25 \
             when temp_dept.RD_E_ID > 25 AND temp_dept.RD_E_ID <= 35 then 35 \
             when temp_dept.RD_E_ID > 35 then 100 \ 
            end) as RD_E_SUP \ 
       from temp_dept

如果您想为 RD_QUOT 设置一个值,那么您也可以在 insertselect 中指定它。