在 Oracle 9i 中声明 FK 时遇到问题。我在 SO 和一些在线文档中查看了许多示例(例如http://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php)没有任何真正的运气;尝试与链接中的语法类似的语法会产生相同的错误:
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 中的默认行为,但我更喜欢尽可能明确。
首先,在Oracle中,没有ON UPDATE RESTRICT
or ON DELETE RESTRICT
选项。这些似乎在其他数据库引擎中有效,但它们不存在于约束语法图并且似乎无效。有一个ON DELETE
子句,但唯一的两个有效选项是CASCADE
or SET NULL
。没有ON UPDATE
clause.
如果我们在末尾添加一个逗号airplane_id
在约束定义之前定义并删除两个无效子句,您的 DDL 应该有效
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),
dept_date date NOT NULL,
<<more columns>>
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)