Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro de SQL:ORA-00907:falta de parênteses à direita


Tem muita coisa errada na sua afirmação.
  • A_EMP_ID CHAR 5 BYTE está faltando o (..) em torno da restrição de comprimento
  • Você definitivamente não quer usar CHAR para o admin_title . UseVARCHAR2 em vez disso.
  • DIVERSITY_TRAINING_CERT = 'N','Y' não é uma expressão válida. Você provavelmente quer diversity_training_cert IN ('N','Y')
  • Enquanto FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id) está sintaticamente correto, não faz sentido. Acho que você quer um manager_id ou algo semelhante. E então algo como FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id) .
    Como alternativa, talvez você queira fazer referência a um employee tabela. Nesse caso, o a_emp_id tipo de dados deve corresponder ao tipo de coluna PK dessa tabela.

  • CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'), tem três erros:
    • uma coluna não deve estar entre aspas simples. Então tem que ser admin_start_date não 'admin_start_date'
    • uma restrição de verificação requer uma condição adequada. <= admin_start_date não é uma condição, você precisa comparar a coluna com algo. Presumível admin_end_date
    • você tem uma vírgula , depois dessa expressão que está errada também.

Juntando tudo você obtém:
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) 
);

Não relacionado, mas:também não há absolutamente nenhuma necessidade de escrever tudo em maiúsculas.