IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

pb avec un generateur d'identités


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut pb avec un generateur d'identités
    Je n'arrive pas a compiler ce programme à l'origine fait sous interbase que je voudrais executer sous oracle kelkun pourrait t il m aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    connect system/manager@adi2;
    grant create any procedure to hdr;
     
    connect hdr/hdr@adi2
    SET TERM ON ;
     
    CREATE SEQUENCE T_IDENTITES_Seq INCREMENT BY 1 NOMAXVALUE NOMINVALUE NOCYCLE CACHE 20 NOORDER;
     
    CREATE OR REPLACE TRIGGER T_IDENTITES_ID_Trg
    before insert on T_IDENTITES
    for each row
    DECLARE
       MonID number := NULL;
    BEGIN
       select T_IDENTITES_Seq.nextval into MonID from dual;
       :new.ID := MonID;
    END;
    /
     
    CREATE OR REPLACE PROCEDURE CREER_IDENTITES
    (
      PNOMBRE NUMBER
    )
    AS
        I NUMBER;
        vID NUMBER;
        vMODULO NUMBER;
        vSEXE CHAR(1);
        vDATE_NAISS DATE;
        vMOIS NUMBER;
        vJOUR NUMBER;
        vANNEE NUMBER;
        vMAX_PRENOMS NUMBER;
        vMIN_PRENOMS NUMBER;
        vNB_PRENOMS NUMBER;
        vPRENOM NUMBER;
        vMAX_NOMS NUMBER;
        vMIN_NOMS NUMBER;
        vNB_NOMS NUMBER;
        vNOM NUMBER;
        vNOM2 NUMBER;
        BEGIN
          I := 0;
          SELECT MAX(ID) FROM T_IDENTITES FOR :vID;
          vID = vID +1;
          SELECT MAX(ID) FROM T_PRENOMS FOR :vMAX_PRENOMS;
          SELECT MIN(ID) FROM T_PRENOMS FOR :vMIN_PRENOMS;
          vNB_PRENOMS = vMAX_PRENOMS - vMIN_PRENOMS;
          SELECT MAX(ID) FROM T_NOMS FOR :vMAX_NOMS;
          SELECT MIN(ID) FROM T_NOMS FOR :vMIN_NOMS;
          vNB_NOMS = vMAX_NOMS - vMIN_NOMS;
          WHILE (I < PNOMBRE) DO
            BEGIN
              I = I + 1;
              vID = T_IDENTITES_ID_Trg;
              vMODULO = vID - ((vID /2) * 2);
              IF (vMODULO = 0)
                THEN vSEXE = 'F';
                ELSE vSEXE = 'M';
              vMODULO = vID - ((vID /12) * 12);
              vMOIS = vMODULO + 1;
              vMODULO = vID - ((vID /28)) * 28);
              vJOUR = vMODULO + 1;
              vMODULO = vID - ((vID /99) * 99);
              vANNEE = vMODULO + 1903;
              vDATE_NAISS = vMOIS||'/'||vJOUR||'/'||vANNEE;
              vMODULO = vID - ((vID / vNB_PRENOMS) * vNB_PRENOMS);
              vPRENOM = vMODULO + vMIN_PRENOMS;
              vMODULO = vID - ((vID / vNB_NOMS) * vNB_NOMS);
              vNOM = vMODULO + vMIN_NOMS;
              INSERT INTO T_IDENTITES (
                  ID,
                  SEXE,
                  DATE_NAISS )
                VALUES (
                  :vID,
                  :vSEXE,
                  :vDATE_NAISS );
              INSERT INTO T_PRENOMS_IDENTITES (
                  IDENTITE,
                  PRENOM,
                  USUEL )
                VALUES (
                  :vID,
                  :vPRENOM,
                  'U' );
              INSERT INTO T_NOMS_IDENTITES (
                  IDENTITE,
                  NOM,
                  NATURE )
                VALUES (
                  :vID,
                  :vNOM,
                  'N' ); /* Nom de naissance */
              vMODULO = vID - ((vID /4) * 4);
              IF (vMODULO = 0) THEN /* Une femme sur deux */
                BEGIN
                  vNOM2 = vMIN_NOMS + vMAX_NOMS - vNOM; /* Autre valeur dans le même intervalle */
                  IF (vNOM = vNOM2) THEN vNOM2 = vNOM2 + 1;
                  INSERT INTO T_NOMS_IDENTITES (
                      IDENTITE,
                      NOM,
                      NATURE )
                    VALUES (
                      :vID,
                      :vNOM2,
                      'M' ); /* Nom marital */
                END
            END
        END
     
     
    SET TERM OFF; 
    COMMIT WORK;




    merci d avance

    [Balises code ajoutées par Helyos]

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Par défaut
    déja il te manque un certain nombre de ;

    Pourrais tu cependant taper show errors à la suite de la création de ton trigger et après la création de ta procédure et nous les coller ici

    De plus pense à utiliser le bouton code

  3. #3
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Erreurs pour PROCEDURE CREER_IDENTITES :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    25/43    PLS-00049: variable de lien erronée 'VID'
    25/43    PLS-00103: Symbole "" rencontré à la place d'un des symboles
             suivants :
             update
    Voila ce qu'il me met j'ai crée la sequence mais avant il me metai la meme chose avec les variable V_MIN,V_MAX etc...

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    pour affecter une valeur à une variable tu dois utiliser := et pas =

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF (vMODULO = 0) 
                THEN vSEXE := 'F'; 
                ELSE vSEXE := 'M';

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(ID) FROM T_IDENTITES FOR :vID;

    c'est quoi ça ?

    ce serait plutôt quelque chose du gente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(ID) INTO  :vID FROM T_IDENTITES;

  6. #6
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    quelqu'un sait pkoi il me met tjr variable de lien erroné et a quoi cela est du

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    j'ai répondu

    je te conseille de te documenter d'avantage en regardant des exemples sur le forum par exemple parce que ton code est bourré d'erreurs

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    les variables ne doivent pas être précédées de : aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(ID) INTO  vID FROM T_IDENTITES;

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Essayes ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    CREATE SEQUENCE T_IDENTITES_Seq INCREMENT BY 1 NOMAXVALUE NOMINVALUE NOCYCLE CACHE 20 NOORDER; 
     
    CREATE OR REPLACE TRIGGER T_IDENTITES_ID_Trg 
    before insert on T_IDENTITES 
    for each row 
    BEGIN 
       :new.ID := T_IDENTITES_Seq.nextval ; 
    END; 
    / 
     
    CREATE OR REPLACE PROCEDURE CREER_IDENTITES 
    ( 
      PNOMBRE NUMBER 
    ) 
    AS 
        I NUMBER; 
        vID NUMBER; 
        vMODULO NUMBER; 
        vSEXE CHAR(1); 
        vDATE_NAISS DATE; 
        vMOIS NUMBER; 
        vJOUR NUMBER; 
        vANNEE NUMBER; 
        vMAX_PRENOMS NUMBER; 
        vMIN_PRENOMS NUMBER; 
        vNB_PRENOMS NUMBER; 
        vPRENOM NUMBER; 
        vMAX_NOMS NUMBER; 
        vMIN_NOMS NUMBER; 
        vNB_NOMS NUMBER; 
        vNOM NUMBER; 
        vNOM2 NUMBER; 
        BEGIN 
          I := 0; 
          SELECT MAX(ID) INTO vID FROM T_IDENTITES; 
          vID := vID +1; 
          SELECT MAX(ID),MIN(ID) INTO vMAX_PRENOMS,vMIN_PRENOMS FROM T_PRENOMS; 
          vNB_PRENOMS := vMAX_PRENOMS - vMIN_PRENOMS; 
          SELECT MAX(ID),MIN(ID) INTO vMAX_NOMS,vMIN_NOMS FROM T_NOMS; 
          vNB_NOMS := vMAX_NOMS - vMIN_NOMS; 
     
          WHILE (I < PNOMBRE) DO 
            BEGIN 
              I := I + 1; 
              vID := T_IDENTITES_ID_Trg; 
              vMODULO := vID - ((vID /2) * 2); 
     
              IF (vMODULO = 0) 
                THEN 
                	vSEXE := 'F'; 
              ELSE 
              	vSEXE := 'M'; 
              END IF;
     
              vMODULO := vID - ((vID /12) * 12); 
              vMOIS := vMODULO + 1; 
              vMODULO := vID - ((vID /28)) * 28); 
              vJOUR := vMODULO + 1; 
              vMODULO := vID - ((vID /99) * 99); 
              vANNEE := vMODULO + 1903; 
              vDATE_NAISS := vMOIS||'/'||vJOUR||'/'||vANNEE; 
              vMODULO := vID - ((vID / vNB_PRENOMS) * vNB_PRENOMS); 
              vPRENOM := vMODULO + vMIN_PRENOMS; 
              vMODULO := vID - ((vID / vNB_NOMS) * vNB_NOMS); 
              vNOM := vMODULO + vMIN_NOMS; 
     
              INSERT INTO T_IDENTITES ( 
                  ID, 
                  SEXE, 
                  DATE_NAISS ) 
                VALUES ( 
                  vID, 
                  vSEXE, 
                  vDATE_NAISS ); 
              INSERT INTO T_PRENOMS_IDENTITES ( 
                  IDENTITE, 
                  PRENOM, 
                  USUEL ) 
                VALUES ( 
                  vID, 
                  vPRENOM, 
                  'U' ); 
              INSERT INTO T_NOMS_IDENTITES ( 
                  IDENTITE, 
                  NOM, 
                  NATURE ) 
                VALUES ( 
                  vID, 
                  vNOM, 
                  'N' ); /* Nom de naissance */ 
     
              vMODULO := vID - ((vID /4) * 4); 
              IF (vMODULO = 0) THEN /* Une femme sur deux */ 
                BEGIN 
                  vNOM2 := vMIN_NOMS + vMAX_NOMS - vNOM; /* Autre valeur dans le même intervalle */ 
                  IF (vNOM = vNOM2) THEN vNOM2 = vNOM2 + 1; 
                  INSERT INTO T_NOMS_IDENTITES ( 
                      IDENTITE, 
                      NOM, 
                      NATURE ) 
                    VALUES ( 
                      vID, 
                      vNOM2, 
                      'M' ); /* Nom marital */ 
                   END IF;
                END ;
            END ;
        END ;
    /  
     
    SET TERM OFF; 
    COMMIT WORK;

  10. #10
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    maintenant g ca comme erreur je c pa d ou vien le fait kil me demande un update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Erreurs pour PROCEDURE CREER_IDENTITES :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    27/41    PLS-00103: Symbole "VMAX_PRENOMS" rencontré à la place d'un des
             symboles suivants :
             update
     
    28/41    PLS-00103: Symbole "VMIN_PRENOMS" rencontré à la place d'un des
             symboles suivants :
             update
     
    30/38    PLS-00103: Symbole "VMAX_NOMS" rencontré à la place d'un des
             symboles suivants :
             update
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
     
    31/38    PLS-00103: Symbole "VMIN_NOMS" rencontré à la place d'un des
             symboles suivants :
             update
     
    33/27    PLS-00103: Symbole "DO" rencontré à la place d'un des symboles
             suivants :
             * & = - + < / > at in loop mod not rem <an exponent (**)>
             <> or != or ~= >= <= <> and or like between overlaps is null
             is not || is dangling year DAY_
             Symbole "loop inséré avant "DO" pour continuer.
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
     
    42/44    PLS-00103: Symbole ")" rencontré à la place d'un des symboles
             suivants :
             * & = - + ; < / > at in mod not rem <an exponent (**)>
             <> or != or ~= >= <= <> and or like between is null is not ||
             is dangling
     
    75/19    PLS-00103: Symbole "=" rencontré à la place d'un des symboles
             suivants :
             := . ( @ % ;
     
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    76/11    PLS-00103: Symbole "IF" rencontré
    78/21    PLS-00103: Symbole "=" rencontré à la place d'un des symboles
             suivants :
             := . ( @ % ;
     
    79/15    PLS-00103: Symbole "IF" rencontré
    79/44    PLS-00103: Symbole "=" rencontré à la place d'un des symboles
             suivants :
             := . ( @ % ;
     
    80/15    PLS-00103: Symbole "INSERT" rencontré
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    89/9     PLS-00103: Symbole "END" rencontré à la place d'un des symboles
             suivants :
             if
    (je tien a signaler ke c la premiere fois de ma vie ke je touche a oracle et c la galere )

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Il y a une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             vID := T_IDENTITES_ID_Trg;
    une variable = un trigger... y'a comme un truc qui colle pas là

  12. #12
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    je l avai enlevé ca maintenant le code ressemble a ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    connect system/manager@adi2; 
    grant create any procedure to hdr; 
     
    connect hdr/hdr@adi2 
    SET TERM ON ; 
     
    CREATE SEQUENCE T_IDENTITE_Seq INCREMENT BY 1 NOMAXVALUE NOMINVALUE NOCYCLE CACHE 20 NOORDER; 
     
    CREATE OR REPLACE TRIGGER T_IDENTITES_ID_Trg 
    before insert on T_IDENTITES 
    for each row 
    DECLARE 
       MonID number := NULL; 
    BEGIN 
       select T_IDENTITES_Seq.nextval into MonID from dual; 
       :new.ID := MonID; 
    END; 
    / 
     
    CREATE OR REPLACE PROCEDURE CREER_IDENTITES 
    ( 
      PNOMBRE NUMBER 
    ) 
    AS 
        I NUMBER; 
        vID NUMBER; 
        vMODULO NUMBER; 
        vSEXE CHAR(1); 
        vDATE_NAISS DATE; 
        vMOIS NUMBER; 
        vJOUR NUMBER; 
        vANNEE NUMBER; 
        vMAX_PRENOMS NUMBER; 
        vMIN_PRENOMS NUMBER; 
        vNB_PRENOMS NUMBER; 
        vPRENOM NUMBER; 
        vMAX_NOMS NUMBER; 
        vMIN_NOMS NUMBER; 
        vNB_NOMS NUMBER; 
        vNOM NUMBER; 
        vNOM2 NUMBER; 
        BEGIN 
          I := 0; 
          SELECT MAX(ID) INTO  vID FROM T_IDENTITES;
          vID := vID +1; 
          SELECT MAX(ID) FROM T_PRENOMS FOR vMAX_PRENOMS; 
          SELECT MIN(ID) FROM T_PRENOMS FOR vMIN_PRENOMS; 
          vNB_PRENOMS := vMAX_PRENOMS - vMIN_PRENOMS; 
          SELECT MAX(ID) FROM T_NOMS FOR vMAX_NOMS; 
          SELECT MIN(ID) FROM T_NOMS FOR vMIN_NOMS; 
          vNB_NOMS := vMAX_NOMS - vMIN_NOMS; 
          WHILE (I < PNOMBRE) DO 
            BEGIN 
              I := I + 1; 
              vMODULO := vID - ((vID /2) * 2); 
              IF (vMODULO = 0) 
                THEN vSEXE := 'F'; 
                ELSE vSEXE := 'M'; 
              vMODULO := vID - ((vID /12) * 12); 
              vMOIS := vMODULO + 1; 
              vMODULO := vID - ((vID /28)) * 28); 
              vJOUR := vMODULO + 1; 
              vMODULO := vID - ((vID /99) * 99); 
              vANNEE := vMODULO + 1903; 
              vDATE_NAISS := vMOIS||'/'||vJOUR||'/'||vANNEE; 
              vMODULO := vID - ((vID / vNB_PRENOMS) * vNB_PRENOMS); 
              vPRENOM := vMODULO + vMIN_PRENOMS; 
              vMODULO := vID - ((vID / vNB_NOMS) * vNB_NOMS); 
              vNOM := vMODULO + vMIN_NOMS; 
              INSERT INTO T_IDENTITES ( 
                  ID, 
                  SEXE, 
                  DATE_NAISS ) 
                VALUES ( 
                  vID, 
                  vSEXE, 
                  vDATE_NAISS ); 
              INSERT INTO T_PRENOMS_IDENTITES ( 
                  IDENTITE, 
                  PRENOM, 
                  USUEL ) 
                VALUES ( 
                  vID, 
                  vPRENOM, 
                  'U' ); 
              INSERT INTO T_NOMS_IDENTITES ( 
                  IDENTITE, 
                  NOM, 
                  NATURE ) 
                VALUES ( 
                  vID, 
                  vNOM, 
                  'N' ); /* Nom de naissance */ 
              vMODULO = vID - ((vID /4) * 4); 
              IF (vMODULO = 0) THEN /* Une femme sur deux */ 
                BEGIN 
                  vNOM2 = vMIN_NOMS + vMAX_NOMS - vNOM; /* Autre valeur dans le même intervalle */ 
                  IF (vNOM = vNOM2) THEN vNOM2 = vNOM2 + 1; 
                  INSERT INTO T_NOMS_IDENTITES ( 
                      IDENTITE, 
                      NOM, 
                      NATURE ) 
                    VALUES ( 
                      vID, 
                      vNOM2, 
                      'M' ); /* Nom marital */ 
                END 
            END 
        END 
     
     
    SET TERM OFF; 
    COMMIT WORK;

  13. #13
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Compare avec le code que je t'ai proposé et tu verras toutes les erreurs que j'ai corrigé

  14. #14
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    merci pour le code maintenant y a beaucoup moins d erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Attention : Déclencheur créé avec erreurs de compilation.
     
     
    Attention : Procédure créée avec erreurs de compilation.
     
     
    Validation effectuée.
     
    Erreurs pour PROCEDURE CREER_IDENTITES :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    32/27    PLS-00103: Symbole "DO" rencontré à la place d'un des symboles
             suivants :
             * & = - + < / > at in loop mod not rem <an exponent (**)>
             <> or != or ~= >= <= <> and or like between overlaps is null
             is not || is dangling year DAY_
             Symbole "loop inséré avant "DO" pour continuer.
     
    47/44    PLS-00103: Symbole ")" rencontré à la place d'un des symboles
             suivants :
             * & = - + ; < / > at in mod not rem <an exponent (**)>
             <> or != or ~= >= <= <> and or like between is null is not ||
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
             is dangling
     
    86/44    PLS-00103: Symbole "=" rencontré à la place d'un des symboles
             suivants :
             := . ( @ % ;
     
    87/15    PLS-00103: Symbole "INSERT" rencontré
    95/20    PLS-00103: Symbole "IF" rencontré à la place d'un des symboles
             suivants :
             ; <an identifier> <a double-quoted delimited-identifier>

  15. #15
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Pour le trigger j'ai un peux trop tailler dans la masse, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER T_IDENTITES_ID_Trg 
    before insert on T_IDENTITES 
    for each row 
    BEGIN 
       select T_IDENTITES_Seq.nextval into :new.ID  from dual; 
    END; 
    /

  16. #16
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    CREATE OR REPLACE PROCEDURE CREER_IDENTITES 
    ( 
      PNOMBRE NUMBER 
    ) 
    AS 
        I NUMBER; 
        vID NUMBER; 
        vMODULO NUMBER; 
        vSEXE CHAR(1); 
        vDATE_NAISS DATE; 
        vMOIS NUMBER; 
        vJOUR NUMBER; 
        vANNEE NUMBER; 
        vMAX_PRENOMS NUMBER; 
        vMIN_PRENOMS NUMBER; 
        vNB_PRENOMS NUMBER; 
        vPRENOM NUMBER; 
        vMAX_NOMS NUMBER; 
        vMIN_NOMS NUMBER; 
        vNB_NOMS NUMBER; 
        vNOM NUMBER; 
        vNOM2 NUMBER; 
        BEGIN 
          I := 0; 
          SELECT MAX(ID) INTO vID FROM T_IDENTITES; 
          vID := vID +1; 
          SELECT MAX(ID),MIN(ID) INTO vMAX_PRENOMS,vMIN_PRENOMS FROM T_PRENOMS; 
          vNB_PRENOMS := vMAX_PRENOMS - vMIN_PRENOMS; 
          SELECT MAX(ID),MIN(ID) INTO vMAX_NOMS,vMIN_NOMS FROM T_NOMS; 
          vNB_NOMS := vMAX_NOMS - vMIN_NOMS; 
     
          WHILE (I < PNOMBRE) LOOP 
            BEGIN 
              I := I + 1; 
              vID := T_IDENTITES_ID_Trg; 
              vMODULO := vID - ((vID /2) * 2); 
     
              IF (vMODULO = 0) 
                THEN 
                	vSEXE := 'F'; 
              ELSE 
              	vSEXE := 'M'; 
              END IF;
     
              vMODULO := vID - ((vID /12) * 12); 
              vMOIS := vMODULO + 1; 
              vMODULO := vID - ((vID /28) * 28); 
              vJOUR := vMODULO + 1; 
              vMODULO := vID - ((vID /99) * 99); 
              vANNEE := vMODULO + 1903; 
              vDATE_NAISS := vMOIS||'/'||vJOUR||'/'||vANNEE; 
              vMODULO := vID - ((vID / vNB_PRENOMS) * vNB_PRENOMS); 
              vPRENOM := vMODULO + vMIN_PRENOMS; 
              vMODULO := vID - ((vID / vNB_NOMS) * vNB_NOMS); 
              vNOM := vMODULO + vMIN_NOMS; 
     
              INSERT INTO T_IDENTITES ( 
                  ID, 
                  SEXE, 
                  DATE_NAISS ) 
                VALUES ( 
                  vID, 
                  vSEXE, 
                  vDATE_NAISS ); 
              INSERT INTO T_PRENOMS_IDENTITES ( 
                  IDENTITE, 
                  PRENOM, 
                  USUEL ) 
                VALUES ( 
                  vID, 
                  vPRENOM, 
                  'U' ); 
              INSERT INTO T_NOMS_IDENTITES ( 
                  IDENTITE, 
                  NOM, 
                  NATURE ) 
                VALUES ( 
                  vID, 
                  vNOM, 
                  'N' ); /* Nom de naissance */ 
     
              vMODULO := vID - ((vID /4) * 4); 
              IF (vMODULO = 0) THEN /* Une femme sur deux */ 
                BEGIN 
                  vNOM2 := vMIN_NOMS + vMAX_NOMS - vNOM; /* Autre valeur dans le même intervalle */ 
                  IF (vNOM = vNOM2) THEN 
                  	vNOM2 := vNOM2 + 1; 
                  INSERT INTO T_NOMS_IDENTITES ( 
                      IDENTITE, 
                      NOM, 
                      NATURE ) 
                    VALUES ( 
                      vID, 
                      vNOM2, 
                      'M' ); /* Nom marital */ 
                   END IF;
                END ;
            END ;
          END LOOP;
        END ;
    /  
     
    SET TERM OFF; 
    COMMIT WORK;

  17. #17
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    CA a l'air de mieux passer ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Erreurs pour PROCEDURE CREER_IDENTITES :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    32/27    PLS-00103: Symbole "DO" rencontré à la place d'un des symboles
             suivants :
             * & = - + < / > at in loop mod not rem <an exponent (**)>
             <> or != or ~= >= <= <> and or like between overlaps is null
             is not || is dangling year DAY_
             Symbole "loop inséré avant "DO" pour continuer.
     
    47/44    PLS-00103: Symbole ")" rencontré à la place d'un des symboles
             suivants :
             * & = - + ; < / > at in mod not rem <an exponent (**)>
             <> or != or ~= >= <= <> and or like between is null is not ||
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
             is dangling
     
    86/44    PLS-00103: Symbole "=" rencontré à la place d'un des symboles
             suivants :
             := . ( @ % ;
     
    87/15    PLS-00103: Symbole "INSERT" rencontré
    95/20    PLS-00103: Symbole "IF" rencontré à la place d'un des symboles
             suivants :
             ; <an identifier> <a double-quoted delimited-identifier>
    eske tu saurai pkoi il ne veut pas du DO

  18. #18
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Erreurs pour PROCEDURE CREER_IDENTITES :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    98/13    PLS-00103: Symbole ";" rencontré à la place d'un des symboles
             suivants :
             if

  19. #19
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    tu pourrais peut-être essayer de chercher tout seul non ? les messages sont assez clairs je pense

  20. #20
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    bon aller... voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    CREATE OR REPLACE PROCEDURE CREER_IDENTITES 
    ( 
      PNOMBRE NUMBER 
    ) 
    AS 
        I NUMBER; 
        vID NUMBER; 
        vMODULO NUMBER; 
        vSEXE CHAR(1); 
        vDATE_NAISS DATE; 
        vMOIS NUMBER; 
        vJOUR NUMBER; 
        vANNEE NUMBER; 
        vMAX_PRENOMS NUMBER; 
        vMIN_PRENOMS NUMBER; 
        vNB_PRENOMS NUMBER; 
        vPRENOM NUMBER; 
        vMAX_NOMS NUMBER; 
        vMIN_NOMS NUMBER; 
        vNB_NOMS NUMBER; 
        vNOM NUMBER; 
        vNOM2 NUMBER; 
        BEGIN 
          I := 0; 
          SELECT MAX(ID) INTO vID FROM T_IDENTITES; 
          vID := vID +1; 
          SELECT MAX(ID),MIN(ID) INTO vMAX_PRENOMS,vMIN_PRENOMS FROM T_PRENOMS; 
          vNB_PRENOMS := vMAX_PRENOMS - vMIN_PRENOMS; 
          SELECT MAX(ID),MIN(ID) INTO vMAX_NOMS,vMIN_NOMS FROM T_NOMS; 
          vNB_NOMS := vMAX_NOMS - vMIN_NOMS; 
     
          WHILE (I < PNOMBRE) LOOP 
            BEGIN 
              I := I + 1; 
              vID := T_IDENTITES_ID_Trg; 
              vMODULO := vID - ((vID /2) * 2); 
     
              IF (vMODULO = 0) 
                THEN 
                	vSEXE := 'F'; 
              ELSE 
              	vSEXE := 'M'; 
              END IF;
     
              vMODULO := vID - ((vID /12) * 12); 
              vMOIS := vMODULO + 1; 
              vMODULO := vID - ((vID /28) * 28); 
              vJOUR := vMODULO + 1; 
              vMODULO := vID - ((vID /99) * 99); 
              vANNEE := vMODULO + 1903; 
              vDATE_NAISS := vMOIS||'/'||vJOUR||'/'||vANNEE; 
              vMODULO := vID - ((vID / vNB_PRENOMS) * vNB_PRENOMS); 
              vPRENOM := vMODULO + vMIN_PRENOMS; 
              vMODULO := vID - ((vID / vNB_NOMS) * vNB_NOMS); 
              vNOM := vMODULO + vMIN_NOMS; 
     
              INSERT INTO T_IDENTITES ( 
                  ID, 
                  SEXE, 
                  DATE_NAISS ) 
                VALUES ( 
                  vID, 
                  vSEXE, 
                  vDATE_NAISS ); 
              INSERT INTO T_PRENOMS_IDENTITES ( 
                  IDENTITE, 
                  PRENOM, 
                  USUEL ) 
                VALUES ( 
                  vID, 
                  vPRENOM, 
                  'U' ); 
              INSERT INTO T_NOMS_IDENTITES ( 
                  IDENTITE, 
                  NOM, 
                  NATURE ) 
                VALUES ( 
                  vID, 
                  vNOM, 
                  'N' ); /* Nom de naissance */ 
     
              vMODULO := vID - ((vID /4) * 4); 
              IF (vMODULO = 0) THEN /* Une femme sur deux */ 
                BEGIN 
                  vNOM2 := vMIN_NOMS + vMAX_NOMS - vNOM; /* Autre valeur dans le même intervalle */ 
                  IF (vNOM = vNOM2) THEN 
                  	vNOM2 := vNOM2 + 1; 
                  INSERT INTO T_NOMS_IDENTITES ( 
                      IDENTITE, 
                      NOM, 
                      NATURE ) 
                    VALUES ( 
                      vID, 
                      vNOM2, 
                      'M' ); /* Nom marital */ 
                   END IF;
                 END ;
              END IF;
            END ;
          END LOOP;
        END ;
    /  
     
    SET TERM OFF; 
    COMMIT WORK;

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. demarrer un macro excel avec FileMaker (generateur BD)
    Par jabranejb dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/11/2012, 22h20
  2. Réponses: 0
    Dernier message: 12/08/2010, 19h21
  3. Réponses: 3
    Dernier message: 26/01/2010, 21h31
  4. Réponses: 0
    Dernier message: 26/01/2009, 12h50
  5. Generateur avec interbase 6
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 20/11/2002, 08h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo