【发布时间】:2015-02-17 02:31:37
【问题描述】:
我写了以下代码:
CREATE OR REPLACE TRIGGER CHECK_tuple
BEFORE INSERT ON tableB
FOR EACH ROW
DECLARE IS_JOIN BOOLEAN:=FALSE
BEGIN
SELECT tableB.column1, tableB.column2,
CASE
WHEN IS_JOIN:= FALSE THEN raise_application_error(-20101, 'ERROR.');
ELSE IS_JOIN:= TRUE
END AS CHCK_JOIN
FROM tableB
JOIN tableA
ON tableB.column1=tableA.column1 AND tableB.column2=tableA.column2;
END;
我必须检查表 A 中是否存在元组 (t1)(使用“元组”,我的意思是表的整行具有多列)。如果存在,它必须与表 B 中的 t2 匹配。在将元组 t2 插入表 B 之前,触发器必须激活。如果 t1 与 t2 不匹配,标志 IS_JOIN 将保持为 FALSE,Oracle SQL 将给出错误。否则,如果 t1 等于 t2,则 IS_JOIN 将为 TRUE,并且不会采取任何措施。我希望对将在表 B 中插入的每一行进行此“检查”。这是正确的方法吗?如果任务不清楚,请询问更多信息。
【问题讨论】:
-
为什么不直接使用外键?
-
而不是触发器?因为我正在为大学的论文编写一个示例代码,它显示了触发器的工作原理。希望我能抓住你的问题,我对 DB 理论有点陌生