此查询有什么问题?
我收到以下错误:
ORA-00905:缺少关键字
00905. 00000 - "缺少关键字"
我的SQL:
CREATE Table ORDERDET
(
ORDERID NUMBER,
CUSTID NUMBER,
PRODID NUMBER,
ORDPRIORITY VARCHAR2(15),
ORDDISCOUNT NUMBER(3,2),
ORDSHIPMODE VARCHAR2(15),
ORDDATE DATE,
ORDSHIPDATE DATE,
ORDSHIPCOST NUMBER(5,2),
ORDQTY NUMBER,
ORDSALES NUMBER(7,2),
CONSTRAINT ch_ORDPRIORITY
CHECK (ORDPRIORITY IN ('Low', 'Medium', 'High', 'Critical', 'Not Specified')),
CONSTRAINT ch_ORDSHIPMODE
CHECK (ORDSHIPMODE IN ('Regular Air','Delivery Truck','Express Air')),
CONSTRAINT pk_ORDERDET
PRIMARY KEY (ORDERID, CUSTID, PRODID),
CONSTRAINT fk_ORDERD
FOREIGN KEY (ORDERID) REFERENCES ORDERS (ORDERID) on DELETE RESTRICT,
CONSTRAINT fk_CUSTOMERORDER
FOREIGN KEY (CUSTID) REFERENCES CUSTOMERS (CUSTID) on DELETE RESTRICT,
CONSTRAINT fk_PRODUCTORDER
FOREIGN KEY (PRODID) REFERENCES PRODUCTS (PRODID) on DELETE RESTRICT
);
答案 0 :(得分:1)
根据文件:CREATE TABLE
没有on DELETE RESTRICT
选项,只允许CASCADE
或SET NULL
,请参阅下面附带的语法图:
我猜你想在子表中有行引用这个父行的情况下防止删除父表中的行 - 如果是,则完全跳过ON DELETE
子句,因为这是外键约束的默认行为。
<强> ---------- 编辑 ---------- 强>
错误报告 - ORA-02264:现有约束已使用的名称 02264. 00000 - &#34;现有约束已使用的名称&#34; *原因:指定的约束名称必须是唯一的。 *行动:指定一个 约束的唯一约束名称。
错误消息显示,您在create table中使用的约束名称之一已经被创建(使用过),并且您无法再次使用它。
我认为您还没有向我们展示整个错误消息,因为Oracle应该打印这个重复的名称。
无论如何,您可以使用此查询找到重复的名称:
select *
from user_objects
where object_name in (
'CH_ORDPRIORITY' ,
'CH_ORDSHIPMODE' ,
'PK_ORDERDET' ,
'FK_ORDERD' ,
'FK_CUSTOMERORDER' ,
'FK_PRODUCTORDER'
)
如果已使用其中一个(或几个)名称,请使用其他名称,例如FK_PRODUCTORDER_11
代替FK_PRODUCTORDER