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 procédure dans un curseur


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Appel procédure dans un curseur
    Hello tout le monde,

    voilà , je n'ai pas trouvé sur le net ( ni ici d'ailleurs) la méthode pouvant me permettre d’appeler une procédure dans un curseur.
    Je m'explique.

    J'ai une procédure qui a besoin d'1 id en entrée et j'aurai 4 valeurs en OUT.

    dans mon curseur , je fais un select de tous les id.
    mais je ne sais pas comment dans ma boucle, du first au last, je sollicite la procédure afin de récupérer par id, les valeurs de sorties qui me permettront ensuite de les insérer sur une table temporaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCEDURE Chargement (PI_ID IN OUT NUMBER,
    PO_ERR OUT NUMBER, 
    PO_COMMENT OUT VARCHAR2,
    PO_DATE_ERR OUT DATE, 
    PO_FLAG OUT NUMBER) IS

    Je ne sais pas si je me suis fait comprendre mais bon, j'vais faire le code pour mieux vous exprimer mon besoin.



    NB :






    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
    CREATE Procédure check_tmp1_id is
     
     
     
    tmp1_id number;
     
     
     
    CURSOR Tmp1 is 
     
    select * from tmp ;
     
     
    BEGIN
     
    Open Tmp1;
    LOOP
    Fetch Tmp1 into tmp1_id;
     
     
    forall x in tmp1_id.first..tmp1_id.last
    ---> là je veux faire appel à la procédure qui consiste à insérer l'id 
     
    PROCEDURE.Chargement (tmp1_id (x) , PO_ERR, PO_COMMENT , PO_DATE_ERR, PO_FLAG)
     
     INSERT INTO Tabletempo ( ID, erreur, comment, date, flag) 
    values ( tmp1_id (x), po_err(x),PO_COMMENT(x) , PO_DATE_ERR(x), PO_FLAG(x));
     
     
    END LOOP;

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Déjà il y a un problème car une procédure ne renvoi pas de valeur alors qu'une fonction oui.

    Sinon pour appeler une fonction dans du PL/SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MaFonction() INTO MaVariable
    FROM dual;
    ~ Lola ~

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci Lola pour ton retour mais j'ai pas compris en fait

  4. #4
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Salut,

    J'ai vu que tu utilises des noms de colonnes tel que : comment , id , date c'est pas top d'utiliser des mots clés réservés pour définir tes noms d'objets.

    Pour ton code , j'ai pas trop compris pourquoi tu bouclais dans la boucle de ton curseur , pour ce que tu veux faire je te propose plutôt :

    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
     
    CREATE PROCEDURE check_tmp1_id IS
     
    PO_ERR NUMBER;
    PO_COMMENT VARCHAR2:
    PO_DATE_ERR DATE;
    PO_FLAG NUMBER;
     
    BEGIN
     
    FOR rec_tmp IN  ( SELECT id_tmp FROM tmp )
        LOOP
            chargement (rec_tmp.id_tmp , PO_ERR, PO_COMMENT , PO_DATE_ERR, PO_FLAG);
     
            INSERT INTO Tabletempo ( ID, erreur, comment, date, flag) 
            VALUES ( rec_tmp.id_tmp, PO_ERR,PO_COMMENT , PO_DATE_ERR, PO_FLAG);
     
        END LOOP;
     
    END;

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Voir les cour sur procédures et fonctions :

    Une procédure est un ensemble de code PL/SQL nommé, défini par l'utilisateur et généralement stocké dans la BDD

    Une fonction est identique à une procédure à la différence qu'elle retourne une valeur
    Or ici tu veux que ta procédure te renvoi ton identifiant....
    ~ Lola ~

  6. #6
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Déjà il y a un problème car une procédure ne renvoi pas de valeur alors qu'une fonction oui.

    Sinon pour appeler une fonction dans du PL/SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MaFonction() INTO MaVariable
    FROM dual;

    Si il défini des paramètres d'appel en OUT dans sa procédure , il peut récupérer les valeurs que lui retourne cette procédure

  7. #7
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par Bibeleuh Voir le message
    Si il défini des paramètres d'appel en OUT dans sa procédure , il peut récupérer les valeurs que lui retourne cette procédure
    Cool
    Je savais pas désolée
    ~ Lola ~

  8. #8
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Cool
    Je savais pas désolée
    no problemo
    je savais que ça existe mais j'ai jamais eu besoin de l'utiliser pour le moment

Discussions similaires

  1. Problème appel procédure dans trigger
    Par fehu42 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 23/02/2012, 19h37
  2. appeler procédure dans la page aspx
    Par luchoo dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/03/2011, 13h17
  3. Réponses: 2
    Dernier message: 20/03/2006, 09h39
  4. [PL/SQL] Appel procédure stockée dans trigger
    Par Félia dans le forum Oracle
    Réponses: 3
    Dernier message: 24/01/2005, 17h25
  5. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59

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