在Oracle 9i中存在聲明FK的問題。我在這裏查看了一些例子以及一些在線文檔(例如http://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php),但沒有真正的運氣;在鏈接嘗試類似的語法來生成相同的錯誤:Oracle中的外鍵約束問題
Error at Command Line:19 Column:4
Error report:
SQL Error: ORA-02253: constraint specification not allowed here
02253. 00000 - "constraint specification not allowed here"
*Cause: Constraint specification is not allowed here in the statement.
*Action: Remove the constraint specification from the statement.
的SQL本身的摘錄如下所示。 「第19行」是指符合CONSTRAINT
CREATE TABLE Flight (
flight_no varchar2(10) NOT NULL,
airplane_id varchar2(20) NOT NULL
CONSTRAINT flight_airplane_id_fk FOREIGN KEY (airplane_id) REFERENCES Airplane (airplane_id)
ON UPDATE RESTRICT ON DELETE RESTRICT,
dept_date date NOT NULL,
...
開始或者,嘗試它沒有CONSTRAINT
關鍵字生成約一個右括號,我似乎無法看到丟失的錯誤。 PS:我知道ON UPDATE RESTRICT是Oracle的默認行爲,但我更喜歡在任何可能的情況下明確表示。
很好,謝謝。我引用了其他文檔(如http://www.dba-oracle.com/bk_on_delete_restrict_on_delete_no_action_tips.htm),但錯過了「RESTRICT」不是有效參數的部分。看起來'沒有任何行動',但是我仍然在嘗試使用時出現錯誤。總之,我想確保如果有小孩存在,什麼都不能刪除。 我假設'ON DELETE CASCADE'是沒有明確指定它作爲約束的一部分時的默認行爲? – elithrar
@elithrar - 如果您不指定'ON DELETE'子句,則默認情況下,如果存在子行,則會阻止刪除父行。如果刪除父項並創建孤立項,則「ON DELETE SET NULL」將子項的父項設置爲「NULL」。如果父項被刪除,則「ON DELETE CASCADE」將完全刪除子記錄。獲得默認行爲的唯一方法是省略「ON DELETE」子句 - 它不會顯示「ON DELETE NO ACTION」是有效的語法。 –
清除它。我對Postgres更加熟悉,所以Oracle的一些特性讓我受益匪淺。似乎默認的行爲是我所追求的。 – elithrar