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

PL/SQL Oracle Discussion :

Appel de procédure


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Par défaut Appel de procédure
    Bonjour,

    J'essaie d'appeler une procédure dans une autre procédure et elle me fait planter la procédure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE   PARSE_EAN_BARCODE(  BARCODE IN VARCHAR2);
    Le fonctionnement est le suivant je scan un code barre la procédure de recherche se lance dans ma base de données avec à l'intérieur la procédure si dessus qui tri les différents champs de mon code barre.

    Le truc spécial c'est que, lancée indépendamment, elle fonctionne correctement mais dès que je la lance dans l'autre procédure celle ci plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        begin
            dbms_output.enable; 
            timestart:=dbms_utility.get_time(); 
            fal_put_debug('ibarrcod',ibarrcod);
     
            -- Destructuration du code barre
            If ibarrcod like '01%' --GS1
            Then
                package.PARSE_EAN_BARCODE(ibarrcod);
    ..........
    j'ai vérifié les données d'entrés je les ai testé de la sorte avec à la place de 'my_bar_code' les bonnes données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    begin package.PARSE_EAN_BARCODE('my_barcode');end;
    ça fonctionne.
    les deux procédures sont définies dans le même package.
    Je parviens pas à saisir d'où peut provenir l'erreur à part des données d'entré que j'ai vérifiés étant bonnes.
    Avez vous des recommandations ou des idées qui pourraient m'aider.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Par défaut
    Le problème est trouvé ma procédure de parsing insert dans une table que ma procédure générale utilise.

    J'aimerai toujours avoir le fonctionnement ou après on utilise toujours une table. Je suis en train de chercher de quelle façon retourner une table ou utiliser une table commune. Si vous avez des idées je suis preneur.

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Le problème exposé et l'analyse ne me semble pas d'une grande limpidité


    En quoi est-ce un problème d'utiliser une donnée insérée dans une table dans une procédure et exploitée dans une autre dès lors où l'on est dans la même transaction ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Par défaut
    De mon point de vue aucun mais ça ne veux pas fonctionner.
    En shéma:

    Lancement
    |
    Procédure 1
    |
    Procédure 2 -> insertion dans my_table
    |
    Procédure 1 utilisation de my_table
    |
    fin

    Il n'y a aucun problème dans ma démarche d'insertion et d'utilisation par la suite, c'est juste que lorsque j'execute la procédure 1 qui contient la procédure 2 ça plante.
    La liste des tests que j'ai fait pour comprendre d'où peut provenir le problème:

    enlever la procédure 2 de procédure 1 -> ça fonctionne :conclusion procédure 1 on est bon

    tester la procédure 2 seule -> ça fonctionne: conclusion procédure 2 on est bon

    enlever les les requetes sur my_table dans la procédure 2 et les laisser dans procédure 1 -> ça fonctionne

    bien sur quand je dis fonctionne c'est juste que mes procédures se terminent, mais ça ne réalise pas ce que je veux.
    Donc les problèmes sont: les requetes de ma procédure 2 quand elle est appelé par 1, et c'est ça qui me met en rogne, je ne voie pas la logique du problème.
    MA PROCEDURE 2 SEULE FONCTIONNE MAIS APPELEE PAR UNE AUTRE PROCEDURE NE FONCTIONNE PAS.
    Dans la procédure 2 s'execute une requete insert sur my_table.
    dans la procédure 1 s'execute une requete select sur my_table.

    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
     
            If ibarrcod like '01%' --GS1
            Then
                package.PARSE_EAN_BARCODE(vbarrcod);
     
     
                begin
                    select ean_data into vEanCode from ind_ean_barcode where ean_id='01';
                    exception when no_data_found then
                    vEanCode := null;
                end;    
                begin
                    select ean_data into vLot from ind_ean_barcode where ean_id='10';
                    exception when no_data_found then
                    vLot := null;
                end; 
                begin
                    select ean_data into vDate_peremption from ind_ean_barcode where ean_id='17';
                    exception when no_data_found then
                    vDate_peremption := null;
                end;

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Par défaut
    avec comme p^rocédure appelé celle ci:
    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
     procedure   PARSE_EAN_BARCODE(  BARCODE IN VARCHAR2)
        as
        v_barcode varchar2(500);
        v_ean_id varchar2(2);
        v_ean_data varchar2(50);
        v_ean_lenght number(20);
        oErrMsgr varchar2(50);
     
    BEGIN  
        v_barcode :=barcode;
        delete from ind_ean_barcode;
        WHILE nvl(v_barcode,NULL) is not NULL 
        LOOP
            v_ean_id:=substr(v_barcode,0,2);
            v_barcode:=substr(v_barcode,3);
            begin
                select ean.ean_lenght into v_ean_lenght from ind_ean_norme ean where ean.ean_id=v_ean_id;
            Exception
                when no_data_found
                -- erreur
                then 
                    oErrMsgr := 'Le code barre non conforme';
    --                BREAK;
            end;
            --données à longueurs définies
            if( v_ean_lenght > 0) then
                v_ean_data:=substr(v_barcode,0,v_ean_lenght);
                if (v_ean_id in (17,11))then
                    if(v_ean_data like '%00')then
                        v_ean_data:=to_date(substr(v_ean_data,0,5)||'1','YYMMDD');
                    else
                        v_ean_data:=to_date(v_ean_data,'YYMMDD');
                    end if;
                end if;
            --données à longueurs non définies
            else
                if(instr(v_barcode,'@')>0)then
                    v_ean_data:=substr(v_barcode,0,instr(v_barcode,'@')-1);
                    v_ean_lenght:=instr(v_barcode,'@');
                else
                    v_ean_data:=v_barcode;
                    v_ean_lenght:=length(v_barcode);
                end if;
            end if;
            v_barcode:=substr(v_barcode,v_ean_lenght+1);
            --Enregistrement des données du code barre 
            begin
                insert into ind_ean_barcode(ean_id , ean_data )
                VALUES(  v_ean_id,
                        v_ean_data);
            end;
        end loop;
    end PARSE_EAN_BARCODE;
    et la partie qui me fait planter le programme étant mon insert.

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Citation Envoyé par BoorBox Voir le message
    [..]
    et la partie qui me fait planter le programme étant mon insert.
    Et c'est quoi l'erreur remontée si ça plante ?

  7. #7
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 961
    Par défaut
    Bonsoir,

    Quel est le niveau d'isolation choisi ?

    voir ici pour les effets :
    https://docs.oracle.com/cd/B12037_01...43/consist.htm

    Pour lister :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT s.sid, s.serial#,
       CASE BITAND(t.flag, POWER(2, 28))
          WHEN 0 THEN 'READ COMMITTED'
          ELSE 'SERIALIZABLE'
       END AS isolation_level
    FROM v$transaction t 
    JOIN v$session s ON t.addr = s.taddr AND s.sid = sys_context('USERENV', 'SID');

Discussions similaires

  1. [appeler une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 10/03/2005, 22h38
  2. Appel de Procédure stockée en ASP
    Par James85 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/11/2004, 17h55
  3. Appel de procédure par contenu de variable
    Par lil_jam63 dans le forum Langage
    Réponses: 9
    Dernier message: 13/09/2004, 08h05
  4. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59
  5. Appel de procédure...
    Par AmaX dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2002, 17h48

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