我正在尝试在oracle中创建一个表但是我收到此错误:未知命令“)” - 其余行被忽略。我无法弄清楚导致此错误的原因。下面是我的SQL表:
CREATE TABLE PAYMENT
(PayNum INT NOT NULL PRIMARY KEY,
CType VARCHAR(1) NOT NULL,
CCNum VARCHAR(16) NOT NULL,
BankName VARCHAR(75) NOT NULL,
AccNum INT NOT NULL,
PDate DATE NOT NULL,
Amt DECIMAL(11,2) NOT NULL,
CONSTRAINT fk_BANKACC_PAYMENT FOREIGN KEY (BankName, AccNum)
REFERENCES BANKACC(BankName, AccNum),
CONSTRAINT fk_CRCARD_PAYMENT FOREIGN KEY (CType, CCNum)
REFERENCES CRCARD(CType, CCNum)
);
答案 0 :(得分:2)
您的代码是正确的。确保引用主键(全部为4)。 检查一下:http://sqlfiddle.com/#!2/7be70/1/0
如果您不这样做,可能会收到此错误:引用的表格中没有主键或候选键' BANKACC'与外键中的引用列列表匹配< fk_BANKACC_PAYMENT'。 小提琴中的代码:
CREATE TABLE BANKACC
(BankName VARCHAR(75) NOT NULL,
AccNum INT NOT NULL,
PRIMARY KEY(BankName, AccNum));
CREATE TABLE CRCARD
(CType VARCHAR(1) NOT NULL,
CCNum VARCHAR(16) NOT NULL,
PRIMARY KEY(CType, CCNum));
CREATE TABLE PAYMENT
(PayNum INT NOT NULL PRIMARY KEY,
CType VARCHAR(1) NOT NULL,
CCNum VARCHAR(16) NOT NULL,
BankName VARCHAR(75) NOT NULL,
AccNum INT NOT NULL,
PDate DATE NOT NULL,
Amt DECIMAL(11,2) NOT NULL,
CONSTRAINT fk_BANKACC_PAYMENT FOREIGN KEY (BankName, AccNum)
REFERENCES BANKACC(BankName, AccNum),
CONSTRAINT fk_CRCARD_PAYMENT FOREIGN KEY (CType, CCNum)
REFERENCES CRCARD(CType, CCNum)
);
另外,您应该阅读本文以更好地理解如何实现外键约束:http://docs.oracle.com/cd/E17952_01/refman-5.5-en/create-table-foreign-keys.html
答案 1 :(得分:2)
如果您在SQL * Plus中运行此功能,请删除REFERENCES
和)
之间的空白行:
REFERENCES CRCARD(CType, CCNum)
);
或set sqlblanklines on
to change the behaviour。
默认情况下,它会将空行解释为语句的结尾,但不会运行它。因此,您的整个CREATE TABLE
命令基本上被忽略,);
被视为stanalone命令。因此,您得到的错误消息,因为它本身并不意味着什么。
答案 2 :(得分:0)
请使用NUMBER作为数字列。
http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT313
此外,在Oracle中,将VARCHAR2用于字符串。
但是你的语法应该是正确的。