2014-04-05 63 views
2

我是新來的SQL,我遇到了一個奇怪的問題。所以我有兩個OFFERS和 供應商。這是供應商表格。SQL,在刪除級聯和更新級聯

CREATE TABLE "SUPPLIER" 
    ( "S#" NUMBER, 
    "NAME" VARCHAR2(50), 
    "CITY" VARCHAR2(50), 
    PRIMARY KEY ("S#") ENABLE 
    ) 

這裏是OFFERS表。

CREATE TABLE "OFFERS" 
    ( "P#" NUMBER, 
    "S#" NUMBER, 
    "V#" NUMBER, 
    "PR#" NUMBER, 
     CONSTRAINT "PK_OFFERS" PRIMARY KEY ("P#") ENABLE 
    ) 

所以現在,當我試圖將一個外鍵約束添加到報價表這樣

ALTER TABLE OFFERS 
ADD CONSTRAINT FK_SUPPLIERS FOREIGN KEY(S#) 
REFERENCES SUPPLIER (S#) 
ON DELETE CASCADE 
ON UPDATE CASCADE 

我得到一個錯誤說: 「ORA-01735:無效的ALTER TABLE選項」。如果我刪除最後一行,這是「ON UPDATE CASCADE」,這工作得很好。那麼,我做錯了什麼?我在互聯網上看到過很多像這樣的例子,這些例子都可以工作,所以我有點困惑。如果這有什麼不同,我正在apex.oracle.com上工作。

+2

如果一切都失敗了閱讀使用說明:http://docs.oracle。 com/cd/B28359_01/server.111/b28286/clauses002.htm#CJAIHHGC –

回答

5

沒有「對級聯更新」,在甲骨文據我所知(即使是在當前版本):

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5773459616034

+0

是否有可用的等效功能/解決方法,除了明顯的「放棄約束,修復值並將約束放回」? – asgs

+1

您不需要刪除它,您可以禁用它並將其打開。最好的解決方案是使用延遲約束,在這種情況下會發生什麼情況 - 執行事務時不會出錯 - 所有延遲約束檢查都會在提交時發生 - 如果您做了所有必需的更改,它將表現爲你期待的方式。 – evenro

+0

查看此鏈接 - 可能有助於http://www.java2s.com/Tutorial/Oracle/0120__Table/DeferredConstraints.htm – evenro