2016-03-08 72 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 
); 

不可否认,违反当你失去了约束的名称。