sql >> Base de Datos >  >> RDS >> Oracle

Error de SQL:ORA-00907:falta el paréntesis derecho

Hay mucho mal con su declaración.

  • A_EMP_ID CHAR 5 BYTE falta el (..) alrededor de la restricción de longitud
  • Definitivamente no desea utilizar CHAR para el admin_title . Usa VARCHAR2 en su lugar.
  • DIVERSITY_TRAINING_CERT = 'N','Y' no es una expresión válida. Probablemente desee diversity_training_cert IN ('N','Y')
  • Mientras FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id) es sintácticamente correcto, no tiene sentido. Supongo que quieres un manager_id o algo similar. Y luego algo como FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id) .
    Alternativamente, quizás pretenda hacer referencia a un employee mesa. En ese caso, el a_emp_id el tipo de datos debe coincidir con el tipo de columna PK de esa tabla.
  • CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'), tiene tres errores:

    • una columna no debe estar entre comillas simples. Entonces tiene que ser admin_start_date no 'admin_start_date'
    • una restricción de verificación requiere una condición adecuada. <= admin_start_date no es una condición, debe comparar la columna con algo. Posible admin_end_date
    • tienes una coma , después de esa expresión que también está mal.

Juntando todo se obtiene:

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

Sin relación, pero:tampoco hay absolutamente ninguna necesidad de escribir todo en mayúsculas.