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



>问题:

我的代码一直工作到最后一行,然后抛出语法错误。

错误:

DB21034E 该命令被处理为 SQL 语句,因为它不是有效的命令行处理器命令。 在 SQL 处理期间,它返回:temp_dept SQL0104N 在"(当 ".预期的令牌可能包括:"加入"。 SQLSTATE=42601

我正在尝试这样做:

  • 每次插入后RD_EMP
  • 对于每一行
  • 插入RD_Supervisor
  • 如果temp_dept,请检查案例。RD_E_ID <= 0 则 RD_Supervisor.RD_E_SUP 0

法典:

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        

你在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 中指定该值。

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

https://xkcd.com/859/

最新更新