简体   繁体   中英

Oracle11g SQL - Error missing right parenthesis while creating table

I've read many thread concerning my problem, but I still can't find what's the problem with my request.

There's my script:

-- drop table MISES cascade constraints;
-- drop table STATUT_MISE_USAGER  cascade constraints;
-- drop table ITEMS cascade constraints;
drop table USAGERS cascade constraints;
-- drop table INFO_ENCAN_OBNL cascade constraints;

create table USAGERS (
        NOM_USAGER_CLI varchar2(40) not null,
        NOM_CLI varchar2(40) not null,
        PRENOM_CLI varchar2(40) not null,
        NO_TELEPHONE_CLI varchar2(13) not null,
        ADRESSE_COURRIEL_CLI varchar2(50) not null,
        MOT_DE_PASSE_CLI varchar2(40) not null,
        constraint PK_USAGERS 
      primary key (NOM_USAGER_CLI),
        constraint AK_USAGERS_1 
      unique (NO_TELEPHONE_CLI),
        constraint AK_USAGERS_2 
      unique (ADRESSE_COURRIEL_CLI),
    constraint CT_NO_TELEPHONE_CLI 
      check (regexp_like(NO_TELEPHONE_CLI, '^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$')),
    constraint CT_MOT_DE_PASSE_CLI 
      check (length(MOT_DE_PASSE_CLI) >= 8)); -- À corriger

create table INFO_ENCAN_OBNL (
        NOM_ECN varchar2(40) not null,
        TYPE_ECN varchar2(40) not null,
        DATE_DEBUT_ECN date not null,
        HEURE_DEBUT_ECN varchar2(5) not null,
        DATE_FIN_ECN date,
        HEURE_FIN_ECN varchar2(5),
        TYPE_AFF varchar2(40),
        RESOLUTION_AFF varchar2(20),
        NB_ITEMS_L_AFF number(2),
        NB_ITEMS_C_AFF number(2),
        BOOL_COMPTEUR_AFF char(1) not null default 0,
        BOOL_LOGO_AFF char(1) not null default 0,
        NOM_OBN varchar2(40) not null,
        -- LOGO_OBN image not null,
        COULEUR_1_OBN varchar2(20),
        COULEUR_2_OBN varchar2(20),
        COULEUR_3_OBN varchar2(20),
        constraint PK_INFO_ENCAN_OBNL 
      primary key (NOM_ECN),
    constraint CT_TYPE_AFF 
      check (TYPE_AFF in ('Écrans géants','Moniteurs sur tables','IPads'))); -- À corriger

create table ITEMS (
    NOM_ECN varchar2(40) not null,
        NO_ITEM number(4) not null,
        TITRE_ITM varchar2(40) not null,
        -- PHOTO_ITM image not null,
        DESCRIPTION_ITM varchar2(50) not null,
        DONATEUR_ITM varchar2(40) not null,
        MNT_VALEUR_REELLE_ITM number(10,2) not null,
        MNT_DEPART_ITM number(10,2) not null,
        MNT_INCREMENT_MIN_ITM number(10,2) not null,
        MNT_ACHAT_IMMEDIAT_ITM number(10,2) not null,
        NOM_USAGER_MENEUR_ITM varchar2(40),
        MNT_ACTUEL_MISE_ITM number(10,2) not null default 0,
        BOOL_MISE_ACTIVEE_ITM char(1) not null default 1,
        BOOL_PAYE_ITM char(1) not null default 0,
        constraint PK_ITEMS 
      primary key (NOM_ECN, NO_ITEM),
        constraint FK_INFO_ENCAN_OBNL 
      foreign key (NOM_ECN)
            references INFO_ENCAN_OBNL (NOM_ECN)
            on delete cascade,
        constraint CT_BOOL_MISE_ACTIVEE_ITM 
      check (case when MNT_ACTUEL_MISE_ITM = MNT_ACHAT_IMMEDIAT 
            then BOOL_MISE_ACTIVEE_ITM = 0)); -- À corriger

create table STATUT_MISE_USAGER (
        NOM_ECN varchar2(40) not null,
        NO_ITEM number(4) not null,
        NOM_USAGER_CLI varchar2(20) not null,
        BOOL_MENEUR_ITM char(1) not null default 0,
        BOOL_DEJA_MISE_ITM char(1) not null default 0, -- 0 = true, 1 = false
        BOOL_FAVORI_ITM char(1) not null default 0,
        constraint PK_STATUT_MISE_USAGER
      primary key (NOM_ECN, NO_ITEM, NOM_USAGER_CLI),
        constraint FK_ITEMS 
      foreign key (NOM_ECN, NO_ITEM)
            references ITEMS (NOM_ECN, NO_ITEM)
            on delete cascade,
        constraint FK_USAGERS 
      foreign key (NOM_USAGER_CLI)
            references USAGERS (NOM_USAGER_CLI)
            on delete cascade,
        constraint FK_INFO_ENCAN_OBNL 
      foreign key (NOM_ECN)
            references INFO_ENCAN_OBNL (NOM_ECN)
            on delete cascade,
        constraint CT_BOOL_MENEUR_ITM 
      check (case when BOOL_DEJA_MISE_ITM = 0 
            then BOOL_MENEUR_ITM = 0)); -- À corriger

create table MISES (
        NOM_ECN varchar2(40) not null,
        NO_ITEM number(4) not null,
        NOM_USAGER_CLI varchar2(20) not null,
        MNT_MIS number(10,2) not null,
        DATE_MIS date not null,
        HEURE_MIS varchar2(5) not null,
        constraint PK_MISES 
      primary key (NOM_ECN, NO_ITEM, NOM_USAGER_CLI, MNT_MIS),
        constraint AK_MISES 
      unique (NOM_ECN, NO_ITEM, NOM_USAGER_CLI, DATE_MIS, HEURE_MIS),
        constraint FK_STATUT_MISE_USAGER 
      foreign key (NOM_ECN, NO_ITEM, NOM_USAGER_CLI)
            references STATUT_MISE_USAGER (NOM_ECN, NO_ITEM, NOM_USAGER_CLI)
            on delete cascade,
        constraint FK_ITEMS 
      foreign key (NOM_ECN, NO_ITEM)
            references ITEMS (NOM_ECN, NO_ITEM)
            on delete cascade,
        constraint FK_USAGERS 
      foreign key (NOM_USAGER_CLI)
            references USAGERS (NOM_USAGER_CLI)
            on delete cascade,
        constraint FK_INFO_ENCAN_OBNL 
      foreign key (NOM_ECN)
            references INFO_ENCAN_OBNL (NOM_ECN)
            on delete cascade); -- À corriger

alter table USAGERS
    add constraint CT_NOM_CLI 
    check (regexp_like(NOM_CLI,'^[[:alpha:]''-]+$'));

alter table USAGERS
    add constraint CT_PRENOM_CLI 
    check (regexp_like(PRENOM_CLI,'^[[:alpha:]''-]+$'));

And these are the errors that I've obtained:

table USAGERS supprimé(e).
table USAGERS créé(e).
Erreur commençant à la ligne 30 de la commande :
create table INFO_ENCAN_OBNL (
        NOM_ECN varchar2(40) not null,
        TYPE_ECN varchar2(40) not null,
        DATE_DEBUT_ECN date not null,
        HEURE_DEBUT_ECN varchar2(5) not null,
        DATE_FIN_ECN date,
        HEURE_FIN_ECN varchar2(5),
        TYPE_AFF varchar2(40),
        RESOLUTION_AFF varchar2(20),
        NB_ITEMS_L_AFF number(2),
        NB_ITEMS_C_AFF number(2),
        BOOL_COMPTEUR_AFF char(1) not null default 0,
        BOOL_LOGO_AFF char(1) not null default 0,
        NOM_OBN varchar2(40) not null,
        -- LOGO_OBN image not null,
        COULEUR_1_OBN varchar2(20),
        COULEUR_2_OBN varchar2(20),
        COULEUR_3_OBN varchar2(20),
        constraint PK_INFO_ENCAN_OBNL 
      primary key (NOM_ECN),
    constraint CT_TYPE_AFF 
      check (TYPE_AFF in ('Écrans géants','Moniteurs sur tables','IPads')))
Erreur à la ligne de commande : 41, colonne : 38
Rapport d'erreur :
Erreur SQL : ORA-00907: parenthèse de droite absente
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Erreur commençant à la ligne 53 de la commande :
create table ITEMS (
    NOM_ECN varchar2(40) not null,
        NO_ITEM number(4) not null,
        TITRE_ITM varchar2(40) not null,
        -- PHOTO_ITM image not null,
        DESCRIPTION_ITM varchar2(50) not null,
        DONATEUR_ITM varchar2(40) not null,
        MNT_VALEUR_REELLE_ITM number(10,2) not null,
        MNT_DEPART_ITM number(10,2) not null,
        MNT_INCREMENT_MIN_ITM number(10,2) not null,
        MNT_ACHAT_IMMEDIAT_ITM number(10,2) not null,
        NOM_USAGER_MENEUR_ITM varchar2(40),
        MNT_ACTUEL_MISE_ITM number(10,2) not null default 0,
        BOOL_MISE_ACTIVEE_ITM char(1) not null default 1,
        BOOL_PAYE_ITM char(1) not null default 0,
        constraint PK_ITEMS 
      primary key (NOM_ECN, NO_ITEM),
        constraint FK_INFO_ENCAN_OBNL 
      foreign key (NOM_ECN)
            references INFO_ENCAN_OBNL (NOM_ECN)
            on delete cascade,
        constraint CT_BOOL_MISE_ACTIVEE_ITM 
      check (case when MNT_ACTUEL_MISE_ITM = MNT_ACHAT_IMMEDIAT 
            then BOOL_MISE_ACTIVEE_ITM = 0))
Erreur à la ligne de commande : 65, colonne : 45
Rapport d'erreur :
Erreur SQL : ORA-00907: parenthèse de droite absente
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Erreur commençant à la ligne 78 de la commande :
create table STATUT_MISE_USAGER (
        NOM_ECN varchar2(40) not null,
        NO_ITEM number(4) not null,
        NOM_USAGER_CLI varchar2(20) not null,
        BOOL_MENEUR_ITM char(1) not null default 0,
        BOOL_DEJA_MISE_ITM char(1) not null default 0, -- 0 = true, 1 = false
        BOOL_FAVORI_ITM char(1) not null default 0,
        constraint PK_STATUT_MISE_USAGER
      primary key (NOM_ECN, NO_ITEM, NOM_USAGER_CLI),
        constraint FK_ITEMS 
      foreign key (NOM_ECN, NO_ITEM)
            references ITEMS (NOM_ECN, NO_ITEM)
            on delete cascade,
        constraint FK_USAGERS 
      foreign key (NOM_USAGER_CLI)
            references USAGERS (NOM_USAGER_CLI)
            on delete cascade,
        constraint FK_INFO_ENCAN_OBNL 
      foreign key (NOM_ECN)
            references INFO_ENCAN_OBNL (NOM_ECN)
            on delete cascade,
        constraint CT_BOOL_MENEUR_ITM 
      check (case when BOOL_DEJA_MISE_ITM = 0 
            then BOOL_MENEUR_ITM = 0))
Erreur à la ligne de commande : 82, colonne : 36
Rapport d'erreur :
Erreur SQL : ORA-00907: parenthèse de droite absente
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Erreur commençant à la ligne 103 de la commande :
create table MISES (
        NOM_ECN varchar2(40) not null,
        NO_ITEM number(4) not null,
        NOM_USAGER_CLI varchar2(20) not null,
        MNT_MIS number(10,2) not null,
        DATE_MIS date not null,
        HEURE_MIS varchar2(5) not null,
        constraint PK_MISES 
      primary key (NOM_ECN, NO_ITEM, NOM_USAGER_CLI, MNT_MIS),
        constraint AK_MISES 
      unique (NOM_ECN, NO_ITEM, NOM_USAGER_CLI, DATE_MIS, HEURE_MIS),
        constraint FK_STATUT_MISE_USAGER 
      foreign key (NOM_ECN, NO_ITEM, NOM_USAGER_CLI)
            references STATUT_MISE_USAGER (NOM_ECN, NO_ITEM, NOM_USAGER_CLI)
            on delete cascade,
        constraint FK_ITEMS 
      foreign key (NOM_ECN, NO_ITEM)
            references ITEMS (NOM_ECN, NO_ITEM)
            on delete cascade,
        constraint FK_USAGERS 
      foreign key (NOM_USAGER_CLI)
            references USAGERS (NOM_USAGER_CLI)
            on delete cascade,
        constraint FK_INFO_ENCAN_OBNL 
      foreign key (NOM_ECN)
            references INFO_ENCAN_OBNL (NOM_ECN)
            on delete cascade)
Erreur à la ligne de commande : 116, colonne : 15
Rapport d'erreur :
Erreur SQL : ORA-00942: Table ou vue inexistante
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
table USAGERS modifié(e).
table USAGERS modifié(e).

I'm stuck on this exercice for school since many hours, so I'd like to thank everyone that will spend a little time on my problem. (I really need your help! :0)

The error is in these lines:

BOOL_COMPTEUR_AFF char(1) not null default 0,
BOOL_LOGO_AFF char(1) not null default 0,

0 is a number, not a character literal. Character literals need to be enclosed in single quotes '0' . More details in the manual

The default clause also needs to go before the not null clause:

BOOL_COMPTEUR_AFF CHAR(1) DEFAULT '0' NOT NULL,
BOOL_LOGO_AFF     CHAR(1) DEFAULT '0' NOT NULL,

The same problem is in the table STATUT_MISE_USAGER

I prefer to use a number(1) column instead of a char(1) column to fake a boolean data type in Oracle - but that is personal preference. You probably also want a check constraint for those columns to make sure only '0' and '1' can be stored.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM