在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