缺少右括号SQL

时间:2014-12-02 18:41:14

标签: oracle

我是SQL新手。

我正在尝试创建一个表:

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));

然而它出现了:ORA-00907:缺少右括号 我知道你可以使用外键,所以这不是问题所在。有人可以给我一个创建表的解决方案吗?

4 个答案:

答案 0 :(得分:1)

外键实际上必须引用某些东西。在您的情况下,您必须告诉Oracle AccountType和CustomerRef引用的内容。通常看起来如下:

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

当然,您必须将TABLE_NAME和COLUMN_NAME替换为表格的名称以及您所指的列名称。

答案 1 :(得分: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)外线

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>添加约束声明,以便将您的名称赋予约束,否则Oracle会指定自己的名称。

内联表示法应用于声明约束的列,将外行应用于表。语法略有不同+一些限制,例如你不能声明外行NULL约束。

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

答案 2 :(得分: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));

答案 3 :(得分:0)

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

<强>更新
我在您对另一个答案的评论中添加了正确的值

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));