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

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 expérimenté

    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
    Points : 1 326
    Points
    1 326
    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
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

  14. #14
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 4
    Points
    4
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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