作者crazykai (Gooday)
看板Database
标题Re: [SQL ] Oracle Cross Table Constraint
时间Sat Nov 28 01:22:16 2009
谢谢大家的回覆
第一次写trigger 感觉问题不少
以下是我的code 还请大家帮忙指出错误 谢谢
CREATE TABLE Exam (exam_ID CHAR(2), exam_DATE DATE)
CREATE TABLE Exam2 (exam_ID CHAR(2), exam_DATE2 DATE)
CREATE trigger exam2_trigger
BEFORE INSERT ON Exam2
FOR EACH ROW
DECLARE DATE Y;
BEGIN
SELECT exam_DATE INTO Y
FROM Exam
WHERE exam_ID = new.exam_ID;
IF new.exam_DATE2 < Y
THEN RAISE_APPLICATION_ERROR(-20000, 'Invalid Date');
END IF;
END
ERROR at line 7: PL/SQL: Statement ignored5. BEGIN
6. SELECT exam_DATE INTO Y
7. FROM Exam
8. WHERE exam_ID = new.exam_ID;
※ 引述《fsz570 (570)》之铭言:
: ※ 引述《crazykai (Gooday)》之铭言:
: : 我有两个TALBE
: : 分别是 EMPLOYEE(Emp_ID, Hire_Date)和 Assignment(Proj_ID ,Emp_ID, Date_Assigned)
: : Rule是Date_assigned必须大於Hire_date
: : 请问有什麽方式可以做到这样的限制呢? 谢谢
: 这种状况最好还是用程式控制,Constraint 没办法 Cross Table 设定
: 如果真的要用 DB 的方式解决,那就写 Trigger 吧
: 但是 Trigger 不能 rollback,也许你可以试试在 Trigger 里 raise Exception
: 或是在 Trigger 里检查到 Date_Assigned 大於 Hire_date 时,将 Date_Assigned
: 的值设定为某特定值 ( 比如说 Hire_Date )
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 96.236.161.193