SQL 代码 SQL DB2 语法问题中的触发器
Triggers in SQL syntax issue in code SQL DB2
问题:
我的代码在到达最后一行之前一直有效,然后抛出语法错误。
错误:
DB21034E 命令作为 SQL 语句处理,因为它不是
有效的命令行处理器命令。在 SQL 处理期间,它返回:
SQL0104N 在“(case when”之后发现了意外标记 "temp_dept"。
预期的令牌可能包括:"JOIN"。 SQL状态=42601
我正在尝试这样做:
- 每次插入后 RD_EMP
- 每行
- 插入 RD_Supervisor
- 检查个案,if temp_dept.RD_E_ID <= 0 THEN 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
您在 CASE 之前有一个左括号,但在 END 之后没有一个右括号。
您在 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
中指定它。
问题:
我的代码在到达最后一行之前一直有效,然后抛出语法错误。
错误:
DB21034E 命令作为 SQL 语句处理,因为它不是 有效的命令行处理器命令。在 SQL 处理期间,它返回: SQL0104N 在“(case when”之后发现了意外标记 "temp_dept"。 预期的令牌可能包括:"JOIN"。 SQL状态=42601
我正在尝试这样做:
- 每次插入后 RD_EMP
- 每行
- 插入 RD_Supervisor
- 检查个案,if temp_dept.RD_E_ID <= 0 THEN 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
您在 CASE 之前有一个左括号,但在 END 之后没有一个右括号。
您在 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
中指定它。