2016-03-28 6 views
1

erstellen Ich mag dieseSQL-Fehler ora-00907 fehlende rechte Klammer Tabelle

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]') 
); 

und ich bekomme diesen Fehler eine Tabelle bin erstellen: Fehler melden - SQL-Fehler: ORA-00907: fehlende rechte Klammer 00907 00000 - "fehlende rechte Klammer" Irgendeine Idee warum?

+0

Es ist keine erstaunliche Antwort, aber haben Sie versucht, die Einschränkungen zu entfernen und sie dann nacheinander hinzuzufügen, um zu sehen, was schief geht? –

+0

Warum haben Sie eine "EINZIGARTIGE" Einschränkung für den Vor- und Nachnamen? Ist es nicht möglich, mehrere Künstler mit demselben Namen zu haben? Warum verwenden Sie auch kein Datum vom Typ "DATUM" für Geburtsdatum/Todesdatum? – MT0

+1

'Char (25)' und 'Char (30)' Datentypen sind fast sicher eine schlechte Wahl. Namen und Nationalitäten sind Strings mit variabler Länge, verwenden Sie stattdessen 'varchar2'. Ihr "DateOfBirth" und "DateDeaseed" sollten mit ziemlicher Sicherheit ein "Datum" sein, anstatt nur ein numerisches Jahr zu speichern. Wenn Sie eine Prüfbedingung für ein numerisches Feld setzen möchten, nehmen Sie einen numerischen Vergleich vor (d. H. 'YearOfBirth BETWEEN 1000 and 2999') –

Antwort

3

Die Oracle 12c syntax for identity columns ist:

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

Wenn Sie 11 Oracle verwenden oder unten, dann können Sie nicht IDENTITY Spalten und eine Sequenz verwenden, aber, vorausgesetzt, Sie 12c verwenden, dann Sie wollen:

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

Danke. Jetzt bin ich mir ziemlich sicher, dass das das Problem ist. Ich werde es reparieren. –

+0

jetzt beschweren sich über GENERATED !! –

+0

jetzt benutze ich Oracle 11, aber immer noch das gleiche Problem –

Verwandte Themen