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

SQL Oracle Discussion :

Exploiter un curseur en sortie d'une procédure


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Exploiter un curseur en sortie d'une procédure
    Bonjour à tous,

    J'ai une procédure stockée qui retourne comme résultat un curseur.
    Voici la spec :
    PROCEDURE R01DataRow (
    Contrat IN VARCHAR,
    Compte IN VARCHAR,
    Chaine_Cpt IN VARCHAR,
    Date_Debut IN String,
    Date_Fin IN String,
    Cursor_Row OUT Cur_R01DATA)

    J'ai besoin de créer un script sql (appelé via sqlplus) qui exécute cette procédure, récupère le curseur et effectue une boucle sur ce curseur pour lire les données et les afficher (avec un dbms_output par exemple).

    Je n'arrive pas à construire un script qui fasse cela.

    Quelqu'un a-t'il une idée ?

    Cordialement.

  2. #2
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    Pour ma part je ferais une procédure métier intermédiaire en PL/SQL qui fait l'appel, récupère le curseur et se charge de la sortie sur le dbms_output.

    ensuite il n'y a plus qu'à appeler la procédure en ligne...
    Philippe CEROU,

    Architecte Systèmes & Bases de données.

  3. #3
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Salut,
    Je ne comprends pas trop ce que tu fais. Tu utilises bien une procédure!!!
    c'est quoi ce paramètre Cursor_Row? c'est lui qui contiendra les données que tu veux tourner en boucle dans ton script sql?

    Pourquoi tu n'utilises pas une fonction qui va faire un "return ton_curseur" et après tu pourras faire comme ce qu'a proposé Philcero
    a+
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    En fait, la procédure stockée, c'est de l'existant.
    J'en ai un paquet de procédures conçues comme ça (une quarantaine) qui ont toutes un paramètre de type OUT qui retourne un curseur.
    Je ne dois pas toucher à ces procédures car elles sont exploitées par un progiciel.

    J'ai besoin de récupérer le retour de ces procédures dans des fichiers plats.
    C'est pour cela que je pensais faire un script sql.

    Le paramètre Cursor_Row est de type REF CURSOR et permet de récupérer un curseur qui est créé par la procédure.

    J'ai écris ce script mais syntaxiquement cela ne plait pas à oracle :
    BEGIN
    DECLARE
    TYPE return_curs IS REF CURSOR
    p_curs return_curs
    BEGIN
    R01.R01datarow('12345678','','','01/02/2008','',p_curs)
    FOR curs_row IN p_curs
    LOOP
    DBMS_OUTPU.PUT_LINE(curs_row.type || ';' ||
    curs_row.numcol || ',' ||
    curs_row.libelle || ';' ||
    curs_row.nba || ';' ||
    curs_row.duree);
    END LOOP;
    END;
    END;


    J'ai le message d'erreur suivant :
    FOR curs_row IN p_curs
    ERROR at line 7:
    ORA-06550: line 7, column 19:
    PLS-00221: 'P_CURS' is not a procedure or is undefined
    ORA-06550: line 7, column 3:
    PL/SQL: Statement ignored

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    J'ai trouvé !

    Voici la solution.
    Je suis obligé de connaître à l'avance la structure de mon record (ça parait logique).

    sqlplus -S -L $USER/$PWD@$SID <<ENDSQL
    set serveroutput on
    BEGIN
    DECLARE
    TYPE t_rec IS RECORD (a CHAR(1), b NUMBER, c VARCHAR2(80), d NUMBER, e NUMBER, f NUMBER);
    p_curs SYS_REFCURSOR;
    curs_row t_rec;
    BEGIN
    C0.C0datarow('05061011','','','01/10/2007','31/10/2007','', p_curs);
    LOOP
    FETCH p_curs INTO curs_row;
    EXIT WHEN p_curs%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(curs_row.a || ';' || curs_row.b || ';' || curs_row.c);
    END LOOP;
    END;
    END;
    /
    quit;
    ENDSQL

  6. #6
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    C'est bon alors!!!
    mais il faut utiliser les balises "code" pour que ton post soit plus lisible.
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

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

Discussions similaires

  1. Passer un curseur en paramètre d'une procédure
    Par tommy_f dans le forum Forms
    Réponses: 4
    Dernier message: 13/05/2008, 16h54
  2. Réponses: 1
    Dernier message: 27/08/2007, 17h40
  3. Réponses: 3
    Dernier message: 27/07/2007, 11h51
  4. Réponses: 6
    Dernier message: 05/04/2007, 13h35
  5. Format de données en sortie d'une procédure stockée
    Par Martin Sylvie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/02/2005, 12h02

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