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

Oracle Discussion :

[PL-SQL] contenu curseur


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 24
    Par défaut [PL-SQL] contenu curseur
    Bonjour,

    tout d'abord je travaille sur la version:

    Oracle8i Release 8.1.7.0.0 - Production
    JServer Release 8.1.7.0.0 - Production


    j'ai une requête dans ma procédure PL-SQL qui ne me renvoie rien ...
    alors que testée à part en SQL elle me renvoie 2 lignes de données ?!

    Voici la requête (ne cherchez pas à la comprendre forcément puisque elle est testée et fonctionnelle) dans son curseur et son exploitation (extraits résumé de la procédure PL-SQL):

    [.../...]

    CURSOR curseur( PE$Edition VARCHAR2, PE$AnMoisSem PLS_INTEGER)
    IS

    SELECT distinct max(en3.edi_mnemo) c_edition, replace(oe.ord_ref_interne || to_char(ins.ins_no_encart,'00'),' ','') c_numord,
    max(replace(pn3.par_num,' ','')) c_dernump, CT.cli_soc
    FROM ordre oe, insertion ins, client ct, edition en, parution pn,
    insertion ins3, parution pn3, ordre oe3, edition en3
    WHERE oe.ord_id = ins.ord_id and ins.edi_id = en.edi_id
    and ins.par_id = pn.par_id and en.edi_id = pn.edi_id
    and ct.cli_id = oe.cli_id
    and en.edi_mnemo in (PE$Edition)
    and pn.par_annee || pn.par_mois || pn.par_semaine = PE$AnMoisSem
    and nvl(oe.ord_quotepart_fact,100)=100
    and ins3.par_id = pn3.par_id and en3.edi_id = pn3.edi_id
    and oe3.ord_id = ins3.ord_id and ins3.edi_id = en3.edi_id
    and (oe3.ord_ref_interne = oe.ord_ref_interne and ins3.ins_no_encart = ins.ins_no_encart)
    and pn3.par_date = (select max(pn1.par_date)
    from parution pn1, insertion ins1
    where ins1.par_id = pn1.par_id
    and ins1.ord_id = oe.ord_id
    and pn1.par_date < pn.par_date)
    group by replace(oe.ord_ref_interne || to_char(ins.ins_no_encart,'00'),' ',''), CT.cli_soc
    order by 3,2 ;


    -- $$ Variables d'accueil:
    LN$NumOrd ORDRE.ord_ref_interne%Type ;
    LN$DerPar PARUTION.par_num%Type ;
    LN$Edition EDITION.edi_mnemo%Type;
    LN$Client CLIENT.cli_soc%Type;

    [.../...]

    Open curseur(editions_pub, LU$AnMoisSem) ; -- ouverture du curseur

    LOOP -- << PARCOURS des ENREGISTREMENTS ORACLE >> ligne.[ ]

    Fetch curseur Into LN$Edition, LN$NumOrd, LN$DerPar, LN$Client ; -- Lecture d'une ligne

    dbms_output.put_line('LN$Edition=' || LN$Edition || 'LN$NumOrd=' || LN$NumOrd || 'LN$DerPar=' || LN$DerPar || 'LN$Client=' || LN$Client);

    [.../...]
    Pour information les variables de la requête passées au curseur sont (récupérée en direct par le débeugeur):

    PE$Edition ='EDI1','EDI2','EDI3'
    PE$AnMoisSem =200682
    Et le résultat du dernier "dbms_output.put_line" :

    LN$Edition=LN$NumOrd=LN$DerPar=LN$Client=
    => rien du tout

    J'insiste bien que la requête testée avec les variables citées ci-dessus (extraites de la procédure qui tourne) fonctionne bien et me renvoie 2 lignes de données ... donc pourquoi pas avec ma procédure ?

    Merci beaucoup pour vos idées

    PS: j'avais dans l'idée de récupérer l'instruction SQL extraite lors du déroulement de la procédure mais je ne vois pas comment faire.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ce serait bien de faire un output des variables aussi

  3. #3
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 24
    Par défaut
    ben oui c'est fait:

    Pour information les variables de la requête passées au curseur sont (récupérée en direct par le débeugeur):


    Citation:
    PE$Edition ='EDI1','EDI2','EDI3'
    PE$AnMoisSem =200682
    ce sont elles les variables récupérées en output ...
    Puis je les ai remplacées manuellement dans ma requête SQL en direct qui fonctionne bien avec: alors pourquoi mon curseur reste vide ? :/

    Ne peut-on pas récupérer la requête exéctuée par la procédure pour être encore plus sûr ?

    merci !

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    non non... moi je veux le résultat COMPLET du output... histoire de voir si il n'y aurait pas des espaces qui trainent

    genre :

    dbms_output.put_line('PE$Edition=' || 'PE$AnMoisSem=' || 'LN$Edition=' || LN$Edition || 'LN$NumOrd=' || LN$NumOrd || 'LN$DerPar=' || LN$DerPar || 'LN$Client=' || LN$Client)

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par pitre
    Ne peut-on pas récupérer la requête exéctuée par la procédure pour être encore plus sûr ?
    ne peut-on pas voir la requête que tu exécutes sous SQL*Plus pour être encore plus sûr ?

  6. #6
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 24
    Par défaut
    ok c'est fait

    voici le nouveu output:

    dbms_output.put_line('PE$Edition=' || editions_pub || 'PE$AnMoisSem=' || LU$AnMoisSem || 'LN$Edition=' || LN$Edition || 'LN$NumOrd=' || LN$NumOrd || 'LN$DerPar=' || LN$DerPar || 'LN$Client=' || LN$Client);
    et le résultat:

    PE$Edition='EDI1','EDI2','EDI3'PE$AnMoisSem=200682LN$Edition=LN$NumOrd=LN$DerPar=LN$Client=
    et bon app' entre-temps

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    mais ça ne marche pas comme ça...

    in (PE$Edition) -> in (''EDI1'',''EDI2'',''EDI3'')
    il recherche la chaine de caractères exacte et non la liste

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

Discussions similaires

  1. [T-SQL]Remplir curseur avec une Procédure stockée
    Par riperoutz dans le forum Développement
    Réponses: 2
    Dernier message: 06/06/2008, 17h59
  2. [SQL] Contenu d'une liste déroulante
    Par marcito dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 18/07/2007, 16h31
  3. [Oracle 10.2] PL/SQL Paramètre Curseur
    Par pegase06 dans le forum PL/SQL
    Réponses: 13
    Dernier message: 01/02/2007, 19h58
  4. [Oracle 8i][PL/SQL] Exceptions & Curseur
    Par Bahan dans le forum Oracle
    Réponses: 3
    Dernier message: 31/08/2006, 16h34
  5. Réponses: 6
    Dernier message: 12/02/2006, 08h31

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