Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur SQL :ORA-00907 :parenthèse droite manquante

Il y a beaucoup de mal dans votre déclaration.

  • A_EMP_ID CHAR 5 BYTE il manque le (..) autour de la contrainte de longueur
  • Vous ne voulez absolument pas utiliser CHAR pour le admin_title . Utilisez VARCHAR2 à la place.
  • DIVERSITY_TRAINING_CERT = 'N','Y' n'est pas une expression valide. Vous voulez probablement diversity_training_cert IN ('N','Y')
  • Alors que FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id) est syntaxiquement correct, cela n'a pas de sens. Je suppose que vous voulez un manager_id ou quelque chose de similaire. Et puis quelque chose comme FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id) .
    Vous avez peut-être également l'intention de faire référence à un employee table. Dans ce cas, le a_emp_id le type de données doit correspondre au type de colonne PK de cette table.
  • CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'), comporte trois erreurs :

    • une colonne ne doit pas être entourée de guillemets simples. Il doit donc être admin_start_date pas 'admin_start_date'
    • une contrainte de vérification nécessite une condition appropriée. <= admin_start_date n'est pas une condition, vous devez comparer la colonne avec quelque chose. admin_end_date présumé
    • vous avez une virgule , après cette expression qui est également fausse.

En mettant tout cela ensemble, vous obtenez :

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

Sans rapport, mais :il n'est absolument pas nécessaire non plus de tout écrire en majuscules.