2014-12-02 152 views
0

我是SQL新手。缺少右括号SQL

我想创建一个表:ORA-00907:

CREATE TABLE account 
(AccountNo NUMBER(2) PRIMARY KEY, 
AccountType VARCHAR(1) FOREIGN KEY REFERENCES account_type(TypeCode), 
CustomerRef NUMBER(2) FOREIGN KEY REFERENCES bank_customer(CustomerRef), 
DateOpened DATE, 
CurrentBalence NUMBER(6,2), 
OverdraftLimit NUMBER(5,2)); 

但是它出现缺少右括号 我知道一个事实,你可以有外键,所以这不是问题。有人能给我一个创建表的解决方案吗?

+0

您需要说外键引用primarytable(col) – radar 2014-12-02 18:44:18

+0

是的,您可以有多个'FK's,但是您没有正确定义它们。除了在列定义中放置FOREIGN KEY之外,还有更多的东西。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm – 2014-12-02 18:44:26

+0

“AccountType,CustomerRef”引用的表和列是什么? – 2014-12-02 18:46:55

回答

0

您需要使用REFERENCES来定义外键。在下面的代码片段中,将AccountTypeTableCustomerRefTable替换为正确的表名,并用这些表中正确的列名替换typeColumnrefColumn

UPDATE
我在正确的值增加从您的评论另一个答案

CREATE TABLE account (
    AccountNo NUMBER(2) PRIMARY KEY, 
    AccountType VARCHAR(1), 
    CustomerRef NUMBER(2), 
    DateOpened DATE, 
    CurrentBalence NUMBER(6,2), 
    OverdraftLimit NUMBER(5,2), 
    CONSTRAINT account_fk1 FOREIGN KEY (AccountType) REFERENCES Account_Type(TypeCode), 
    CONSTRAINT account_fk2 FOREIGN KEY (CustomerRef) REFERENCES Bank_Customer(CustomerRef)); 
0

你缺少外键语法...

CREATE TABLE account 
(AccountNo NUMBER(2) PRIMARY KEY (P_ID), 
AccountType VARCHAR(1) FOREIGN KEY (F1_ID) REFERENCES <table_name>(field_name>), 
CustomerRef NUMBER(2) FOREIGN KEY (F2_ID) REFERENCES <table_name>(field_name>), 
DateOpened DATE, 
CurrentBalence NUMBER(6,2), 
OverdraftLimit NUMBER(5,2)); 
+0

已经做到了这一点。但仍然说相同的消息:CREATE TABLE帐户 (AccountNo NUMBER(2)PRIMARY KEY, ACCOUNTTYPE VARCHAR(1)的外键参考ACCOUNT_TYPE(类型码), CustomerRef NUMBER(2)的外键参考bank_customer(CustomerRef) DateOpened DATE, CurrentBalence NUMBER(6,2), OverdraftLimit NUMBER(5,2)); – 2014-12-02 18:52:21

+0

给出主键和外键的唯一名称 – deejay 2014-12-02 18:54:31

1

的外键实际上有指事。在你的情况下,你必须告诉Oracle AccountType和CustomerRef引用了什么。通常它看起来如下:

AccountType VARCHAR(1) FOREIGN KEY REFERENCES TABLE_NAME(COLUMN_NAME) 

当然,你必须用表的名称和你指的是列的名称,以取代TABLE_NAME和COLUMN_NAME。

1

有声明的约束时,你可以使用两个符号:

1)在线(约束):

CREATE TABLE account 
(AccountNo NUMBER(2) PRIMARY KEY, 
AccountType VARCHAR(1) REFERENCES account_type(TypeCode), 
CustomerRef NUMBER(2) REFERENCES bank_customer(CustomerRef), 
DateOpened DATE, 
CurrentBalence NUMBER(6,2), 
OverdraftLimit NUMBER(5,2)); 

2)out-of-线

CREATE TABLE account 
(
AccountNo NUMBER(2) PRIMARY KEY, 
AccountType VARCHAR(1), 
CustomerRef NUMBER(2), 
DateOpened DATE, 
CurrentBalence NUMBER(6,2), 
OverdraftLimit NUMBER(5,2), 
FOREIGN KEY(AccountType) REFERENCES account_type(TypeCode), 
FOREIGN KEY(CustomerRef) REFERENCES account_type(TypeCode) 
); 

在这两种情况下,你可以在前面加上约束声明与CONSTRAINT <name>,让您的名字命名的约束,否则甲骨文分配它自己的名字。

行内符号应用于声明约束的列,将行外应用于表。在语法上有一些细微差别+一些限制,例如你不能声明out-of-line NULL约束。

您可以在CREATE TABLE和ALTER TABLE中使用内联和外联语法。有关更多信息,请参阅Oracle文档