Oracle
 sql >> Database >  >> RDS >> Oracle

Errore SQL:ORA-00907:parentesi a destra mancanti in difficoltà

C'è molto di sbagliato nella tua affermazione.

  • A_EMP_ID CHAR 5 BYTE manca il (..) attorno al vincolo di lunghezza
  • Non vuoi assolutamente usare CHAR per il admin_title . Usa VARCHAR2 invece.
  • DIVERSITY_TRAINING_CERT = 'N','Y' non è un'espressione valida Probabilmente vuoi diversity_training_cert IN ('N','Y')
  • Mentre FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id) è sintatticamente corretto, non ha senso. Immagino tu voglia un manager_id o qualcosa di simile. E poi qualcosa come FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id) .
    In alternativa, potresti voler fare riferimento a un employee tavolo. In tal caso il a_emp_id il tipo di dati deve corrispondere al tipo di colonna PK di quella tabella.
  • CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'), ha tre errori:

    • una colonna non deve essere racchiusa tra virgolette singole. Quindi deve essere admin_start_date non 'admin_start_date'
    • un vincolo di controllo richiede una condizione adeguata. <= admin_start_date non è una condizione, devi confrontare la colonna con qualcosa. Presumibile admin_end_date
    • hai una virgola , dopo quell'espressione che è anche sbagliata.

Mettendo tutto insieme ottieni:

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

Non correlato, ma:non c'è nemmeno assolutamente bisogno di scrivere tutto in maiuscolo.