Oracle11g SQL - 创建表时错过右括号时出错

时间:2015-02-15 22:00:22

标签: sql oracle oracle11g

我已经阅读了许多关于我的问题的帖子,但我仍然无法找到我的请求的问题。

我的剧本:

-- 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:]''-]+$'));

这些是我获得的错误:

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

我很长时间以来一直坚持上学,所以我要感谢大家花一点时间解决问题。 (我真的需要你的帮助!:0)

1 个答案:

答案 0 :(得分:3)

错误在以下几行:

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

0是一个数字,而不是字符文字。字符文字需要用单引号'0'括起来。 More details in the manual

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

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

同样的问题在表STATUT_MISE_USAGER

我更喜欢使用number(1)列而不是char(1)列来伪造Oracle中的布尔数据类型 - 但这是个人偏好。您可能还需要对这些列进行检查约束,以确保只能存储'0''1'