2017-01-13 94 views
0
create table Funkcje 
(
    nazwa_funkcji varchar(15) constraint funk_pk PRIMARY KEY, 
    min_myszy number(5) funk_min_nn NOT NULL, 
    max_myszy number(5) funk_max_nn NOT NULL, 
    constraint funk_ch check(min_myszy < max_myszy) 
) 

我得到一個錯誤在創建表的訂單:00907. 00000 - 「缺少右括號」

ORA-00907 - 「缺少右括號」

回答

3

如果你想在行中指定一個NOT NULL約束,您需要使用約束關鍵字,與其他類型的約束條件一樣使用

create table Funkcje 
(
    nazwa_funkcji varchar(15) constraint funk_pk PRIMARY KEY, 
    min_myszy number(5) constraint funk_min_nn NOT NULL, 
    max_myszy number(5) constraint funk_max_nn NOT NULL, 
    constraint funk_ch check(min_myszy < max_myszy) 
) 

這將返回在數據字典

SQL> select constraint_name, constraint_type, search_condition_vc 
    2 from user_constraints 
    3 where table_name = 'FUNKCJE'; 

CONSTRAINT_NAME  C SEARCH_CONDITION_VC 
-------------------- - ----------------------- 
FUNK_MIN_NN   C "MIN_MYSZY" IS NOT NULL 
FUNK_MAX_NN   C "MAX_MYSZY" IS NOT NULL 
FUNK_CH    C min_myszy < max_myszy 
FUNK_PK    P 

而且下面,雖然VARCHAR和VARCHAR2是相同的Oracle不保證VARCHAR的當前行爲將繼續(它已經很長一段時間相同,雖然)。使用varchar2會更平常。 The documentation says

請勿使用VARCHAR數據類型。改爲使用VARCHAR2數據類型。 雖然VARCHAR數據類型當前與VARCHAR2, 同義,但VARCHAR數據類型計劃重新定義爲與 不同的比較語義相比用於可變長度字符串的單獨數據類型 。