2016-03-28 86 views
1

我創建這樣SQL錯誤ORA-00907缺少右括號創建表

CREATE TABLE ARTIST (

    ArtistID   Int    NOT NULL IDENTITY(1,1), 
    LastName   Char(25)  NOT NULL, 
    FirstName   Char(25)  NOT NULL, 
    Nationality   Char(30)  NULL, 
    DateOfBirth   Numeric(4)  NULL, 
    DateDeceased  Numeric(4)  NULL, 
    CONSTRAINT ArtistPK   PRIMARY KEY(ArtistID), 
    CONSTRAINT ArtistAK1   UNIQUE(LastName, FirstName),  
    CONSTRAINT BirthValuesCheck CHECK (DateOfBirth < DateDeceased), 
    CONSTRAINT ValidBirthYear  CHECK 
      (DateOfBirth LIKE '[1-2][0-9][0-9][0-9]'), 
    CONSTRAINT ValidDeathYear  CHECK 
      (DateDeceased LIKE '[1-2][0-9][0-9][0-9]') 
); 

一個表,我得到這個錯誤:錯誤報告 - SQL錯誤:ORA-00907:缺少右括號 00907 。00000 - 「缺少右括號」 任何想法爲什麼?

+0

這不是一個了不起的答案,但你有沒有嘗試刪除約束,然後逐個添加它們以查看哪些失敗? –

+0

爲什麼你對名字和姓氏有'UNIQUE'約束?是不可能有多個同名的藝術家?另外,爲什麼不在出生/死亡日期使用'DATE'日期類型? – MT0

+1

'char(25)'和'char(30)'數據類型幾乎肯定是一個糟糕的選擇。名稱和國籍是可變長度字符串,請改用'varchar2'。你的'DateOfBirth'和'DateDeceased'幾乎可以肯定是一個'date',而不僅僅是存儲一個數字年份。如果您想在數字字段中添加檢查約束,請進行數字比較(即'YearOfBirth BETWEEN 1000和2999') –

回答

3

甲骨文12C syntax for identity columns是:

GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] 
AS IDENTITY [ (identity_options) ] 

如果您使用的是Oracle 11或以下,那麼你不能有IDENTITY列,將不得不使用一個序列,但是,假設你使用12C然後你想:

CREATE TABLE ARTIST (
    ArtistID   Int    NOT NULL GENERATED ALWAYS AS IDENTITY, 
    LastName   Char(25)  NOT NULL, 
    FirstName   Char(25)  NOT NULL, 
    Nationality   Char(30)  NULL, 
    DateOfBirth   Numeric(4)  NULL, 
    DateDeceased  Numeric(4)  NULL, 
    CONSTRAINT ArtistPK   PRIMARY KEY(ArtistID), 
    CONSTRAINT ArtistAK1   UNIQUE(LastName, FirstName),  
    CONSTRAINT BirthValuesCheck CHECK (DateOfBirth < DateDeceased), 
    CONSTRAINT ValidBirthYear  CHECK 
      (DateOfBirth LIKE '[1-2][0-9][0-9][0-9]'), 
    CONSTRAINT ValidDeathYear  CHECK 
      (DateDeceased LIKE '[1-2][0-9][0-9][0-9]') 
); 
+0

謝謝。現在我很確定這是問題所在。我會解決它。 –

+0

現在它抱怨GENERATED! –

+0

現在我使用的是Oracle 11,但仍然是相同的問題 –