问题:
我的代码一直有效,直到达到最后一行,然后它会引发语法错误。
错误:
DB21034E该命令作为SQL语句处理,因为它不是 有效的命令行处理器命令。在SQL处理期间,它返回: SQL0104N在“(case when”之后)发现了一个意外的令牌“temp_dept”。 预期的代币可能包括:“加入”。 SQLSTATE = 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
答案 0 :(得分:1)
CASE之前有一个左括号,但在END之后你没有右括号。
答案 1 :(得分:1)
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
设置一个值,那么您也可以在insert
和select
中指定该值。