2016-03-28 17 views
0

我試圖用「on delete」和「on update」參照觸發操作來創建一個新表,但它一直說有一個語法錯誤。當我嘗試運行該腳本時,錯誤消息是「缺少右括號」。我不明白爲什麼這是不對的。在Oracle中參照觸發操作的語法錯誤

CREATE TABLE PERSON 
(SSN  VARCHAR(9)   NOT NULL, 
Name  VARCHAR(20)   NOT NULL, 
Phone  VARCHAR(10), 
Address VARCHAR(40), 
Employer VARCHAR(20), 
Insurer VARCHAR(20), 
PCP  INT, 
CONSTRAINT PERPPK 
    PRIMARY KEY(SSN), 
CONSTRAINT PEREMPFK 
    FOREIGN KEY(Employer) REFERENCES EMPLOYER(Name) 
       ON DELETE SET NULL  ON UPDATE CASCADE, 
CONSTRAINT PERINSFK 
    FOREIGN KEY(Insurer) REFERENCES INSURER(Name) 
       ON DELETE SET NULL  ON UPDATE CASCADE, 
CONSTRAINT PERPCP 
    FOREIGN KEY(PCP) REFERENCES PHYSICIAN(PID) 
       ON DELETE SET NULL  ON UPDATE CASCADE); 
+0

第一條刪除語句後顯示錯誤消息 – lymisscarol

+0

在[Oracle手冊](http://docs.oracle.com/database/121/SQLRF/toc.htm)中,您是否發現「on update '語法? –

回答

0

ON UPDATE CASCADE是無效的語法。有沒有直接的方式來做到這一點,並有充分的理由。您不應該創建一個模型,您必須更新主鍵中的值。主鍵只能創建和刪除,從不更新。如果它正在更新,那麼它可能不是主鍵。但這是你必須要做的設計考慮因素。

如果你想實現類似級聯更新的東西,你可以用存儲過程和延遲約束來實現。推遲約束並在提交之前更新父鍵和外鍵。

Here是關於這方面的問題討論。 Another.