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 :

Récupérer les retours de plusieurs procédures avec des tableaux en sortie [11g]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Chargé de sélection client
    Inscrit en
    Février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de sélection client

    Informations forums :
    Inscription : Février 2017
    Messages : 9
    Par défaut Récupérer les retours de plusieurs procédures avec des tableaux en sortie
    Bonjour.

    J'ai une cinquantaine de procédures stockées dans 9 packages différents et je souhaite récupérer l’ensemble des résultats en une seule fois.

    Lorsque ma procédure me retourne un number, pas de souci, je passe par ça et ça fonctionne :

    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
    PROCEDURE tests_unitaires_values IS
     
    result SYS_REFCURSOR;
    volume number;
     
    BEGIN
     
    PKG_KPI_1_CARBURANT.Proc_1_5('YTD','FUSION','K904',null,null,null,null,null,null,null,null,null,result);
     
    loop 
    fetch result into Volume;
    exit when result%NOTFOUND;
    dbms_output.put_line(Volume);
    end loop;
    close result;
     
    END tests_unitaires_values;
     
    END PKG_TEST;

    En revanche lorsque ma procédure me retour un tableau de valeurs (nombre de lignes pas forcément connu), impossible. J'ai tenté un get_lines mais sans succès et je suis bloqué sur ce point depuis un bon moment.

    Auriez vous des suggestions à me proposer s'il vous plait?

    J'espère que mon problème est assez clair.

    PS : je suis novice en PL/SQL

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Quelle est la définition de PKG_KPI_1_CARBURANT.Proc_1_5 ?

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé de sélection client
    Inscrit en
    Février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de sélection client

    Informations forums :
    Inscription : Février 2017
    Messages : 9
    Par défaut
    Pour la PKG_KPI_1_CARBURANT.Proc_1_5 ça fonctionne car il n'y a qu'un seul retour. Sinon toutes mes procédures sont déclarées de la même façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        PROCEDURE Proc_1_5(
            periode IN VARCHAR2,
            ...
            siret IN VARCHAR2,
            debug IN INTEGER,
            result OUT SYS_REFCURSOR
        );

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je n'ai pas de souci.

    Procédure qui retourne soit 1 colonne 1 ligne, soit 1 colonne 2 lignes, soit 2 colonnes 2 lignes
    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
    CREATE OR REPLACE  PROCEDURE WMC ( p_type IN VARCHAR2, p_result OUT  sys_refcursor)
    AS
      ret_cur sys_refcursor;
    BEGIN
      IF p_type = 'un'
      THEN
        OPEN ret_cur FOR SELECT 1 FROM DUAL;
      ELSIF p_type = 'deux'
      THEN
        OPEN ret_cur FOR SELECT 1 FROM DUAL UNION ALL SELECT 2 FROM DUAL;
      ELSIF p_type = 'trois'
      THEN
        OPEN ret_cur FOR SELECT 1, 'a' FROM DUAL UNION ALL SELECT 2, 'b' FROM DUAL;
      END IF;
      p_result := ret_cur;
    END;

    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
    DECLARE
    	result SYS_REFCURSOR;
    	volume number; col2 VARCHAR2(1);
    BEGIN
    	WMC('un',result);
      LOOP 
      FETCH result INTO Volume;
        exit WHEN result%NOTFOUND;
        dbms_output.put_line('un : ' || Volume);
      END LOOP;
    	CLOSE result;
    	WMC('deux',result);
      LOOP 
      FETCH result INTO Volume;
        exit WHEN result%NOTFOUND;
        dbms_output.put_line('deux : ' || Volume);
      END LOOP;
    	CLOSE result;
    	WMC('trois',result);
      LOOP 
      FETCH result INTO Volume, col2;
        exit WHEN result%NOTFOUND;
        dbms_output.put_line('trois : ' || Volume ||' # '|| col2);
      END LOOP;
    	CLOSE result;
    END;
    Résultat correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    un : 1
    deux : 1
    deux : 2
    trois : 1 # a
    trois : 2 # b

  5. #5
    Membre régulier
    Homme Profil pro
    Chargé de sélection client
    Inscrit en
    Février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de sélection client

    Informations forums :
    Inscription : Février 2017
    Messages : 9
    Par défaut
    Je ne connais pas à l'avance le nombre de colonnes ni le nombre de lignes. C'est pourquoi je ne peux pas appliquer cette méthodologie.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Le nombre de ligne est géré par le curseur et la boucle LOOP

    Si tu ne connais pas le nombre et type des colonnes, ce n'est pas possible.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/10/2015, 18h45
  2. [Débutant] plusieurs SI avec des tableaux
    Par kanwulf62 dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/06/2013, 09h16
  3. Récupérer plusieurs lignes avec des procédures stockées
    Par GPZ{^_^} dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/03/2007, 13h16
  4. Changer plusieur style avec des IDs différents?
    Par YanK dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2005, 14h33
  5. Réponses: 5
    Dernier message: 05/10/2004, 13h05

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