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 :

[Expert] problème de typpage dans un FETCH INTO


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1
    Par défaut [Expert] problème de typpage dans un FETCH INTO
    Bonjour,

    Mon problème concerne la récupération des résultats depuis un curseur pour les placer dans un tableau de VARCHAR2.

    Je crée une procédure dont le but est d'exécuter une requête de type Select passée en paramètre. La requête peut renvoyer un nombre quelconque de colonnes mais elles sont toutes formattées en VARCHAR2 (pré requis). La requête peut effectuée des jointures...

    La requête est exécutée par la procédure dans un REF CURSOR.

    Je souhaite ensuite parcourir ce curseur est stockant chaque ligne dans un tableau de VARCHAR2 : records_row pour le parcourir item par item recors_row(0) , recors_row(1)... avec une boucle FOR.

    Mon code actuel est le suivant :
    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
    PROCEDURE PROC_TEST(
     
    	IN_REQ IN VARCHAR2,
    	OUT_ERREUR OUT INTEGER)
     
    IS
     
      TYPE RET_CURSOR IS REF CURSOR;
      cListe RET_CURSOR;
      TYPE REQ_COLLECTION IS TABLE OF VARCHAR2(100);
      records_row REQ_COLLECTION;
     
    BEGIN
     
     
             -- recuperation des elements
    	OPEN cListe FOR IN_REQ;
     
    	LOOP
    		-- pour chaque element
    		FETCH cListe INTO records_row;
    		EXIT WHEN cListe%NOTFOUND;
     
                    FOR i IN records_row.FIRST.. records_row.LAST LOOP
     
                    ...
    Le problème est que je me retrouve avec une erreure de typpage :

    Error(35,21): PLS-00597: expression 'RECORDS_ROW' in the INTO list is of wrong type

    Mais je ne peut pas utiliser de declaration du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE REQ_COLLECTION IS TABLE OF MY_TABLE%rowtype;
    Puisque je ne connais pas ce qui est renvoyé par le Select (quelques tables et quelles colonnes sont renvoyées)

    Est-il possible en PL/SQL d'exécuter une méthode quelconque et de récupérer pour chaque ligne de résultat un tableau de VARCHAR2 ou un tableau non typpé ???

    Cordialement

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Je crains que vous ne deviez passer par du SQL dynamique.
    Consultez cet article et télécharger le .ZIP. Il contient un package permettant de récupérer une liste de colonnes à partie d'un ordre SQL.

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    En plus de la solution propose par le SheikYerbouti je me rappelle à avoir vu cette article

  4. #4
    Invité de passage
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Par défaut
    Bonjour, j'utilise un curseur pour récupérer une donnée d'une varaible qui est dans un tableau. Le problème c'est qu'il me la renvoie autant de fois qu'il n'y a de ligne dans le tableau.
    Quelle restriction je pourré mettre pour qu'il ne me la sorte qu'une seule fois (à la ligne ou la donnée est présente)?

    Merci pour vos réponses

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Pouvez-vous être plus explicite ? Si votre curseur ne doit retourner qu'une ligne, ajuster l'ordre SQL en conséquence.

Discussions similaires

  1. Problème dans mon INSERT INTO
    Par bsangoku dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/04/2011, 11h25
  2. [AC-2007] Problème de jointure dans INSERT INTO avec INNER JOIN
    Par andy331 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/03/2010, 15h59
  3. [SQL] Problème de guillemets dans un INSERT INTO SELECT
    Par Lenezir dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/02/2008, 14h21
  4. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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