Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL-Fehler:ORA-00907:Problem mit fehlender rechter Klammer

An Ihrer Aussage ist vieles falsch.

  • A_EMP_ID CHAR 5 BYTE fehlt der (..) um die Längenbeschränkung
  • Sie möchten auf keinen Fall CHAR verwenden für den admin_title . Verwenden Sie VARCHAR2 stattdessen.
  • DIVERSITY_TRAINING_CERT = 'N','Y' ist kein gültiger Ausdruck. Wahrscheinlich möchten Sie diversity_training_cert IN ('N','Y')
  • Während FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id) syntaktisch korrekt ist, macht es keinen Sinn. Ich vermute, Sie möchten eine manager_id oder etwas ähnliches. Und dann so etwas wie FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id) .
    Alternativ möchten Sie vielleicht auf einen employee verweisen Tisch. In diesem Fall die a_emp_id Der Datentyp muss mit dem Typ der PK-Spalte dieser Tabelle übereinstimmen.
  • CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'), hat drei Fehler:

    • eine Spalte darf nicht in einfache Anführungszeichen gesetzt werden. Es muss also admin_start_date sein nicht 'admin_start_date'
    • Ein Check-Constraint erfordert eine korrekte Bedingung. <= admin_start_date ist keine Bedingung, Sie müssen die Spalte mit etwas vergleichen. Vermutlich admin_end_date
    • Sie haben ein Komma , nach diesem Ausdruck, der ebenfalls falsch ist.

Alles zusammen ergibt:

CREATE TABLE admin 
(
    a_emp_id                  CHAR(5 BYTE) NOT NULL, 
    admin_start_date          DATE DEFAULT SYSDATE NOT NULL,
    admin_end_date            DATE NULL,
    diversity_training_cert   CHAR(1 BYTE)  DEFAULT 'N' NOT NULL,
    admin_title               VARCHAR2(40 BYTE) NULL,
    CONSTRAINT admin_pk 
        PRIMARY KEY(a_emp_id),
    CONSTRAINT admin_fk1 
        FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id),
    CONSTRAINT admin_diversity_cert 
        CHECK (diversity_training_cert IN ('N','Y')), 
    CONSTRAINT admin_end_date 
        CHECK ( admin_end_date <= admin_start_date) 
);

Unabhängig, aber:Es ist auch absolut nicht nötig, alles in Großbuchstaben zu schreiben.