2016-03-08 65 views
0

當我嘗試創建一個測試表與一些測試行,SQL Plus中給了我以下錯誤:的Oracle SQL創建表格文檔

SQL> CREATE TABLE test_table 
    2 (
    3 test_data0 NUMBER(3) CONSTRAINT test_data0_pk PRIMARY KEY, 
    4 test_data1 NUMBER(3) CONSTRAINT test_data1_fk REFERENCES test_table2, CONSTRAINT test_data1_condition NOT NULL, 
    5 test_data2 DATE CONSTRAINT test_data2_condition NOT NULL, 
    6 test_data3 NUMBER(2), 
    7 test_data4 NUMBER(2) DEFAULT 0 
    8 ); 
test_data1  NUMBER(3) CONSTRAINT test_data1_fk REFERENCES test_table2, C 
ONSTRAINT test_data1_condition NOT NULL, 

           * 
ERROR at line 4: 
ORA-00904: : invalid identifier 

如果我只把兩個約束的一個第4行我不沒有任何錯誤。問題是什麼?

回答

1

對於內聯約束,您不需要constraint關鍵字。當然,你可以使用它。但是,特別是,not null通常表示沒有約束。所以:

CREATE TABLE test_table (
    test_data0 NUMBER(3) CONSTRAINT test_data0_pk PRIMARY KEY, 
    test_data1 NUMBER(3) NOT NULL CONSTRAINT test_data1_fk REFERENCES test_table2, 
    test_data2 DATE NOT NULL, 
    test_data3 NUMBER(2), 
    test_data4 NUMBER(2) DEFAULT 0 
); 

如果多次使用constraint更多,你需要離開了逗號。那是你得到的錯誤。所以這條線將是:

test_data1 NUMBER(3) CONSTRAINT test_data1_fk REFERENCES test_table2 
        CONSTRAINT test_data1_condition NOT NULL, 

我經常離開了constraint本身內嵌的約束:

CREATE TABLE test_table (
    test_data0 NUMBER(3) PRIMARY KEY, 
    test_data1 NUMBER(3) NOT NULL REFERENCES test_table2, 
    test_data2 DATE NOT NULL, 
    test_data3 NUMBER(2), 
    test_data4 NUMBER(2) DEFAULT 0 
); 

不可否認,違反當你失去了約束的名稱。