首页 > 解决方案 > 如何在插入 db2 之前创建触发器

问题描述

我在下面有三个表:

在此处输入图像描述

我需要创建一个触发器以禁止学生在未完成先决条件的情况下上课(必须使用触发器)。当尝试插入一个没有正确前置请求的类时,触发器必须返回错误消息“缺少前置请求”。

到目前为止,我在下面写了一个命令:

create trigger checkPrereq 
before insert on HW3.SCHEDULE
referencing new as newRow
for each row 
When 
(
  select GRADE 
  from HW3.SCHEDULE
  where HW3.SCHEDULE.ClassId = 
  (
    select PrereqId from HW3.CLASS_PREREQ
    where newRow.ClassId = HW3.CLASS_PREREQ.ClassId
  )
) in ('F', null) 
begin atomic
  set newRow.Semester = null; 
  signal sqlstate 'KILLED' set message_text = ('Missing Pre-req');
end

但我收到警告:

DB21034E 该命令被作为 SQL 语句处理,因为它不是有效的命令行处理器命令。在 SQL 处理期间,它返回:SQL0104N 在“每行时(选择”)之后发现了意外的标记“GRADE”。预期的标记可能包括:“)”。行号=1。SQLSTATE=42601

我无法理解这里发生了什么。你能帮忙解决这个问题吗?任何帮助表示赞赏!

标签: triggersinsertdb2multi-table

解决方案


推荐阅读