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 :

Problème de Curseur sur une Collection


Sujet :

PL/SQL Oracle

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut Problème de Curseur sur une Collection
    Bonjour,
    j'ai un souci avec la déclaration d'un Curseur sur une Collection.
    Peut-être même que cela n'est pas possible.

    Voici mon code (simplifié) :
    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
    54
    TYPE typ_c_curseur IS REF CURSOR;
     
    PROCEDURE proc1 (pio_c_curseur OUT typ_c_curseur)
    IS
    CURSOR v_c_donneur_manquant
    IS
    SELECT cont_code AS code_contrat, cont_libelle AS libelle_contrat,
               'Tiers donneur manquant'AS erreur
    FROM contrats
    WHERE contrats.cont_actif =1
    AND contrats.cont_isarchived =0
    AND contrats.cont_pk NOT IN (SELECT cont_trs_cont_fk
                          FROM contrats_tiers
                          WHERE cont_trs_typ_trs ='PRENEUR');
     
    TYPE t_bail_errone IS RECORD(
                  code_contrat VARCHAR2(200),
                  libelle_contrat VARCHAR2(200),
                  erreur VARCHAR2(200)
                  );
     
    TYPE tab_t_bail_errone IS TABLE OF bail_errone INDEX BY BINARY_INTEGER;
     
    mes_baux_err tab_t_bail_errone;
     
    v_n_compteur INTEGER:=0;
     
    BEGIN
     OPEN v_c_donneur_manquant;
     LOOP
       BEGIN
         v_n_compteur := v_n_compteur +1;
         FETCH v_c_donneur_manquant
           INTO mes_baux_err (v_n_compteur);
         EXIT WHEN v_c_donneur_manquant%NOTFOUND;
       EXCEPTION
         WHEN OTHERS
         THEN
          RAISE;
       END;
     END LOOP;
    
     
     CLOSE v_c_donneur_manquant;
    
     
     OPEN pio_c_curseur FOR
        SELECT code_contrat, libelle_contrat, erreur
        FROM mes_baux_err
        ORDER BY code_contrat, libelle_contrat, erreur;
     
    END proc1;
    
    J'ai une erreur à la compilation : Erreur 00942 - Table ou vue inexistante.
    Sur la déclaration d'ouverture du curseur pio_c_curseur.

    Merci de m'aider ou de me dire que ma façon de faire est erronée.
    (Je pense utiliser une table temporaire sinon).

  2. #2
    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
    mes_baux_err doit être déclaré comme une type en SQL (avec create type etc.) et non pas comme un associative array en PL/SQL.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut Problème de Curseur sur une Collection
    J'ai tenté cette solution mais ça ne marche pas mieux.
    Je prend donc la solution de créer une structure de table que je remplirais au fur et à mesure.
    Je construirait à la fin mon cursuer sur cette table.

  4. #4
    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
    Citation Envoyé par mrugala Voir le message
    J'ai tenté cette solution mais ça ne marche pas mieux.
    ...
    Probablement que tu t'y es mal pris
    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
     
    Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0 
    Connected as mni
     
    SQL> 
    SQL> set serveroutput on
    SQL> Create Or Replace Type t_bail_errone As Object(
      2    code_contrat    VARCHAR2(200),
      3    libelle_contrat VARCHAR2(200),
      4    erreur          VARCHAR2(200)
      5  );
      6  /
     
    Type created
    SQL> Create Or Replace Type tab_t_bail_errone Is Table Of t_bail_errone;
      2  /
     
    Type created
    SQL> Declare
      2    mes_baux_err     tab_t_bail_errone := tab_t_bail_errone();
      3  Begin
      4    mes_baux_err.extend;
      5    mes_baux_err(1) := t_bail_errone('CONTRAT_1', 'Libelle CONTRAT_1','Erreur CONTRAT_1');
      6    mes_baux_err.extend;
      7    mes_baux_err(2) := t_bail_errone('CONTRAT_2', 'Libelle CONTRAT_2','Erreur CONTRAT_2');
      8    --
      9    For crs In (
     10                Select value(t).code_contrat code_contrat
     11                  From Table(mes_baux_err) t
     12                )
     13    Loop
     14      Dbms_output.put_line(crs.code_contrat);
     15    End Loop;
     16    --
     17  End;
     18  /
     
    CONTRAT_1
    CONTRAT_2
     
    PL/SQL procedure successfully completed
     
    SQL>

Discussions similaires

  1. Problème conception - traitement sur une collection
    Par christophefrance dans le forum UML
    Réponses: 1
    Dernier message: 27/04/2009, 11h43
  2. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11
  3. probléme de cadre sur une image qui me sert de lien
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/11/2004, 17h36
  4. Problème de chaine sur une page HTML
    Par Kerod dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2004, 16h23
  5. [DBLookupComboBox] Avoir un curseur sur une DBLookupCoboBox
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/05/2004, 11h52

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