Oracle 甲骨文一直在展示';ORA-00907:缺少右括号';我做错了什么?
我发现至少有两个问题,不能像那样声明外键约束,不能有一个名为DATE的列,因为它是一个保留字Oracle 甲骨文一直在展示';ORA-00907:缺少右括号';我做错了什么?,oracle,oracle11g,Oracle,Oracle11g,我发现至少有两个问题,不能像那样声明外键约束,不能有一个名为DATE的列,因为它是一个保留字 CREATE TABLE transaction_order ( national_ID VARCHAR2 (20) FOREIGN KEY REFERENCES client (national_ID), account_no VARCHAR2 (25) FOREIGN KEY REFERENCES account (account_no), transaction_ID VARCHAR2 (20)
CREATE TABLE transaction_order
(
national_ID VARCHAR2 (20) FOREIGN KEY REFERENCES client (national_ID),
account_no VARCHAR2 (25) FOREIGN KEY REFERENCES account (account_no),
transaction_ID VARCHAR2 (20) FOREIGN KEY REFERENCES transaction (transaction_ID),
date DATE NOT NULL,
time NUMBER (10) NOT NULL,
place VARCHAR2 (20) NOT NULL,
new_balance VARCHAR2 (20) NOT NULL
);
请不要将日期更改为“DATE”来回避保留字问题-这将在以后的应用程序堆栈中导致问题,尤其是当人们试图查询数据时 您的语法错误,正确的是:
CREATE TABLE TRANSACTION_ORDER (
NATIONAL_ID VARCHAR2(20),
CONSTRAINT ID_XFK FOREIGN KEY ( NATIONAL_ID )
REFERENCES CLIENT ( NATIONAL_ID ),
ACCOUNT_NO VARCHAR2(25),
CONSTRAINT NO_XFK FOREIGN KEY ( ACCOUNT_NO )
REFERENCES ACCOUNT ( ACCOUNT_NO ),
TRANSACTION_ID VARCHAR2(20),
CONSTRAINT TRAN_ID_XFK FOREIGN KEY ( TRANSACTION_ID )
REFERENCES TRANSACTION ( TRANSACTION_ID ),
DATES DATE NOT NULL,
TIME NUMBER(10) NOT NULL,
PLACE VARCHAR2(20) NOT NULL,
NEW_BALANCE VARCHAR2(20) NOT NULL
);
不带外键
ORA-00907:缺少右括号
此消息是Oracle的通用语法消息之一。它表示我们的SQL不会编译,因为该语句包含缺少的关键字或逗号,或者关键字不合适。在本例中,这是因为编译器不喜欢内联外键子句
内联外键声明要么冗长,包含约束和外键关键字以及引用,要么简洁,仅包含引用
事实上,如果你要用极简主义的符号,为什么不全力以赴呢?这条线
CREATE TABLE transaction_order
(
national VARCHAR2 (20) REFERENCES client (national_ID),
account_no VARCHAR2 (25) REFERENCES account (account_no),
transaction_ID VARCHAR2 (20) REFERENCES transaction (transaction_ID),
date DATE NOT NULL,
time NUMBER (10) NOT NULL,
place VARCHAR2 (20) NOT NULL,
new_balance VARCHAR2 (20) NOT NULL
);
…创建客户端表主键的外键,并自动符合引用列的数据类型
所以你只需要这个
national_ID REFERENCES client
注意,我更改了transaction\u date
的名称:plain date是Oracle保留的关键字,因此不允许将其用作标识符
可能需要强制使用外键:外键本身无法做到这一点。也可能需要添加主键约束
CREATE TABLE transaction_order
(
national_ID REFERENCES client ,
account_no REFERENCES account ,
transaction_ID REFERENCES transaction,
transaction_date DATE NOT NULL,
time NUMBER (10) NOT NULL,
place VARCHAR2 (20) NOT NULL,
new_balance VARCHAR2 (20) NOT NULL
);