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 :

Procédure PL/SQL avec paramètre in/out de type CURSOR


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Par défaut Procédure PL/SQL avec paramètre in/out de type CURSOR
    Bonjour,

    J'ai une procédure PL/SQL sous Oracle 10g avec en paramètre d'entrée 2 dates et en paramètre in/out un objet de type curseur.

    Ma procédure fait un update sur les ligne d'une table et en flag certaines à 1.
    J'aimerai que mon curseur prenne toutes les lignes à 1 et soit renvoyé en tant que paramètre de sortie de ma procédure.

    J'ai donc fait un package pour définir mon type CURSOR comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE PACKAGE cursor_def AS
    TYPE CatCurTyp IS REF CURSOR RETURN
    all_objects%ROWTYPE;
    END cursor_def;
    Puis voici ma procédure :
    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
    REATE OR REPLACE PROCEDURE FIBO.VERS_FSE_DGD (date1 IN DATE,date2 IN DATE, bo_cursor IN OUT cursor_def.CatCurTyp) 
    IS 
     
     
    CURSOR mdt_lib_bc1 
       IS 
          SELECT code_oper,lib_mdt 
          FROM bo_vers_fse_dgd 
          WHERE lib_mdt LIKE '%DGD%' AND (lib_mdt LIKE '%BC1%' OR lib_mdt LIKE '%BC 1%') 
          AND dtmand BETWEEN  date1 AND date2; 
     
    CURSOR mdt_lib_bc2 
       IS 
          SELECT code_oper 
          FROM bo_vers_fse_dgd 
          WHERE lib_mdt LIKE '%DGD%' AND (lib_mdt LIKE '%BC2%' OR lib_mdt LIKE '%BC 2%') 
          AND dtmand BETWEEN  date1 AND date2; 
     
    BEGIN 
     
    UPDATE bo_vers_fse_dgd 
    SET flag = NULL; 
     
     
    FOR mdt IN mdt_lib_bc1 
    LOOP 
     
    UPDATE bo_vers_fse_dgd 
    SET flag = 1 
    WHERE 
    code_oper = mdt.code_oper 
    AND (lib_mdt LIKE '%BC1%' OR lib_mdt LIKE '%BC 1%'); 
     
    END LOOP; 
    commit;
    FOR mdt2 IN mdt_lib_bc2 
    LOOP 
     
     
    UPDATE bo_vers_fse_dgd 
    SET flag = 1 
    WHERE 
    code_oper = mdt2.code_oper 
    AND (lib_mdt LIKE '%BC2%' OR lib_mdt LIKE '%BC 2%'); 
    END LOOP; 
    commit;
     
    OPEN bo_cursor FOR SELECT * FROM bo_vers_fse_dgd WHERE flag = 1;
     
     
    END;
    Or il me plante à la compilation de la procédure sur le remplissage du curseur bo_cursor sur la ligne qui commence par "OPEN bo_cursor ..." avec l'erreur suivante : "PLS-00382: expression du mauvais type"

    On dirait que l'expression "Select ..." n'est pas du bon type, enfin je ne comprends pas trop.

    Si quelqu'un a une idée ou une piste pour me débloquer, ce serait super sympa.
    Merci par avance.

  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
    C'est simple. Ca passe:
    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
     
    Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0 
    Connected as mni
     
    SQL> 
    SQL> Declare
      2    TYPE CatCurTyp IS REF CURSOR RETURN all_objects%ROWTYPE;
      3    Procedure P1(rc OUT CatCurTyp) Is
      4    Begin
      5      Open rc for Select * from all_objects;
      6    End;
      7  Begin
      8    Null;
      9  End;
     10  /
     
    PL/SQL procedure successfully completed
     
    SQL>
    Ca passe pas
    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
     
    Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0 
    Connected as mni
     
    SQL> Declare
      2    TYPE CatCurTyp IS REF CURSOR RETURN all_objects%ROWTYPE;
      3    Procedure P1(rc OUT CatCurTyp) Is
      4    Begin
      5      Open rc for Select * from emp;
      6    End;
      7  Begin
      8    Null;
      9  End;
     10  /
     
    Declare
      TYPE CatCurTyp IS REF CURSOR RETURN all_objects%ROWTYPE;
      Procedure P1(rc OUT CatCurTyp) Is
      Begin
        Open rc for Select * from emp;
      End;
    Begin
      Null;
    End;
     
    ORA-06550: Ligne 6, colonne 17 :
    PLS-00382: expression du mauvais type
    ORA-06550: Ligne 6, colonne 5 :
    PL/SQL: SQL Statement ignored
     
    SQL>

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Par défaut
    Super merci beaucoup.
    En effet ça marche quand je remplace all_objects par le nom de ma table dans la définition du package :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE PACKAGE FIBO.cursor_def AS
    TYPE CatCurTyp IS REF CURSOR RETURN
    bo_vers_fse_dgd%ROWTYPE;
    END cursor_def;
    Merci A+

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

Discussions similaires

  1. Procédure SQL avec paramètre entrée et paramètre sortie
    Par francky74 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/07/2014, 08h25
  2. Appel procédure PL/SQL avec Hibernate avec paramètre retour OUT
    Par rom292 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 02/06/2012, 20h15
  3. Requète SQL avec paramètres
    Par Stouille89 dans le forum C++Builder
    Réponses: 6
    Dernier message: 08/01/2008, 07h54
  4. Requête SQL avec paramètre sur BDD Access
    Par BigMike dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/06/2007, 12h21
  5. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33

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