>问题:
我的代码一直工作到最后一行,然后抛出语法错误。
错误:
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
设置一个值,那么您也可以在 insert
和 select
中指定该值。
您在 CASE 之前有一个左括号,但在 END 之后没有右括号。
https://xkcd.com/859/