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 :

procédure ne fonctionne pas


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut procédure ne fonctionne pas
    Bonjour,
    J'ai réalisé une procédure, elle insert une ligne dans une table(projet), et elle reprend le code de la nouvelle ligne pour en insert une autre dans une autre table(activite), Sans le rollback la premiére est bien inseré, mais pas la deuxieme. Si vous avez une idée de mon erreur... merci d'avance.

    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
    CREATE OR REPLACE 
    PROCEDURE COPIE8PROJ (code in projet.projcode%type) AS 
     
    codep projet.projcode%type;
    codea activite.actiidlot%type;
    p projet%rowtype;
    acti activite%rowtype;
     
    BEGIN
     
          select code_proj into codep from dual;
          select * into p from projet where projcode = code;
          insert into projet values (codep, p.clino, p.typprojid, p.sectactiid, p.colabmatri, p.projchaglobesti, p.projcyclvi, p.projdtdbuprev,
            p.projdtfnprev, p.projdtreeldbu, null, p.projlibcour, p.projliblon, p.projnbcolab, 'copie'); 
     
          select id_lot(codep) into codea from dual ;
          select * into acti from activite where projcode = code and actiidlot = to_number(concat(code, to_char('01')));
          insert into activite values (codea, acti.typactiid, codep, 0, 0, 0);
     
        commit;
     
      exception
      when others then
      dbms_output.put_line('erreur');
      rollback;
     
    END COPIE8PROJ;
    oracle 11g, win xp

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut Hu ?
    Bonjour,

    Ca compile ça ?

    C'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Select code_proj Into codep From dual;
    Qui me fait tiquer.

    Pozzo

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    Tout d’abord merci de t'être penché sur mon problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT code_proj INTO codep FROM dual;
    .
    en faite code_proj est une fonction que me renvoi un numéro séquentiel associé a un autre nombre.
    Sinon la compilation est bonne.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Ah.

    Deux idées :
    1 Il n'y a pas un trigger sur la table active qui pourait perturber ?
    2 Si tu fais un dbms_output.put_line('Fini') avant la clause exception ça s'affiche bien ?

    Pozzo

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    résultat de l’exécution de la procédure :
    Connexion à la base de données active.
    Le projet 1006 n'existe pas
    erreur
    Processus fermé.
    Déconnexion de la base de données active.
    "Le projet 1006 n’exite pas" c'est le resultat de ma fonction id_lot

    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
    create or replace
    FUNCTION ID_LOT (codepro projet.projcode%type)
    RETURN number AS 
    annee number;
    code number;
    recup char :='0';
    BEGIN
      select max(actiidlot) into code from activite where projcode = codepro;
      code := (substr(code, -2,2))+1;
     
      if code<10 then
          code := concat(codepro, (concat(recup, to_char(code))));
      else
          code := concat((to_char(annee)), to_char(code));
      end if;
      code := to_number(code);
      if code is null then 
           dbms_output.put_line('Le projet '||codepro||' n''existe pas');
      else
         RETURN code;
      end if;
    END ID_LOT;
    Elle fonctionne bien.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    Problème resolu, cela venais de ma fonction, que j'avais créé pour les updates et non les insert, tout bête
    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
    CREATE OR REPLACE 
    PROCEDURE COPIE8PROJ (code in projet.projcode%type) AS 
     
    codep projet.projcode%type;
    codea activite.actiidlot%type;
    p projet%rowtype;
    acti activite%rowtype;
     
    BEGIN
     
          select * into p from projet where projcode = code;
          select code_proj into codep from dual;
          insert into projet values (codep, p.clino, p.typprojid, p.sectactiid, p.colabmatri, p.projchaglobesti, p.projcyclvi, p.projdtdbuprev,
            p.projdtfnprev, p.projdtreeldbu, null, p.projlibcour, p.projliblon, p.projnbcolab, 'copie'); 
          codea := 1;
          codea := concat(codep, (concat('0', to_char(codea))));    
          codea := to_number(codea); 
     
          select * into acti from activite where projcode = code and actiidlot = to_number(concat(code, to_char('01'))); 
          insert into activite values (codea, acti.typactiid, codep, 0, 0, 0);
     
    commit;  
     
      exception
      when others then
      dbms_output.put_line('erreur');
      rollback;
     
    END COPIE8PROJ;
    Voili, voilou mon code qui marche, merci pour l'aide et le temps passé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Procédure ne fonctionnant pas au premier appel
    Par escargot72 dans le forum Free Pascal
    Réponses: 1
    Dernier message: 18/09/2014, 21h32
  2. [AC-2010] Procédure ne fonctionne pas
    Par patgag78 dans le forum VBA Access
    Réponses: 8
    Dernier message: 23/10/2013, 20h46
  3. La procédure ne fonctionne pas selon le bouton
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/11/2010, 15h18
  4. procédure ne fonctionne pas
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/05/2009, 13h46
  5. [Postgresql] Procédure avec if ne fonctionne pas
    Par rgdu86 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/03/2008, 13h30

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