2014-12-02 218 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文檔