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 :

OPEN CURSOR FOR avec type clob


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut OPEN CURSOR FOR avec type clob
    Bonjour,

    Je suis confronté à un probleme en Pl/SQL :
    J'ai une tres grande chaine de caracteres qui contient une requete, j'ai donc utilisé le type CLOB.
    requete CLOB;
    requete:= 'select ........'

    Ensuite je renvoie le resultat dans un curseur
    OPEN p_cursor FOR requete;

    Or la signature est Open p_cursor For <VARCHAR>, j'obtiens donc le message d'erreur suivant 'expression is of wrong type'.

    Auriez vous une idée pour résoudre ce probleme ?

    Merci

  2. #2
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Citation Envoyé par voyageur Voir le message
    Bonjour,

    Je suis confronté à un probleme en Pl/SQL :
    J'ai une tres grande chaine de caracteres qui contient une requete, j'ai donc utilisé le type CLOB.
    requete CLOB;
    requete:= 'select ........'

    Ensuite je renvoie le resultat dans un curseur
    OPEN p_cursor FOR requete;

    Or la signature est Open p_cursor For <VARCHAR>, j'obtiens donc le message d'erreur suivant 'expression is of wrong type'.

    Auriez vous une idée pour résoudre ce probleme ?

    Merci
    euh ....... Je capte pas là ...
    Le type CLOB est un type de données pour les CHAMPS.
    Pourquoi l'utilises tu pour une requete ???
    Ta requete (meme longue) ne rentre pas dans une chaine ?

    et pourquoi ne fais tu pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
    CURSOR p_cursor IS ( TA_REQUETE);
    BEGIN
    OPEN p_cursor
    .....
    END;

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    La requete ne rentre pas dans un varchar, elle contient plus de 10 000 caracteres, et je dois renvoyer le resultat dans un curseur comme ceci
    OPEN p_cursor FOR requete.

  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 voyageur Voir le message
    La requete ne rentre pas dans un varchar, elle contient plus de 10 000 caracteres, et je dois renvoyer le resultat dans un curseur comme ceci
    OPEN p_cursor FOR requete.
    varchar2 en PL/SQL a plus de 32000 caracteres.

  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
    10000 caractères... et créer une vue ça ne te tente pas pour simplifier tout ça ?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Le varchar2 arrive finalement à contenir la requete.
    L'erreur se situe maintenant dans ma requete.
    J'aimerai affichier cette requete avec dbms_output.put_line(requete) mais cette fonction ne peut prendre une chaine de plus de 255 caracteres.
    Comment pourrais je affichier le resultat a l'ecran ?

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 74
    Par défaut
    Citation Envoyé par mnitu Voir le message
    varchar2 en PL/SQL a plus de 32000 caracteres.


    Non, le varchar2 est limité à 4000 caractères d'après la documentation officielle d'oracle

  8. #8
    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 ihebiheb Voir le message
    Non, le varchar2 est limité à 4000 caractères d'après la documentation officielle d'oracle
    Oui mais il comprendre de quoi on parle: Different Maximum Sizes

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par voyageur Voir le message
    J'ai une tres grande chaine de caracteres qui contient une requete, j'ai donc utilisé le type CLOB.
    requete CLOB;
    requete:= 'select ........'

    Ensuite je renvoie le resultat dans un curseur
    OPEN p_cursor FOR requete;

    Or la signature est Open p_cursor For <VARCHAR>, j'obtiens donc le message d'erreur suivant 'expression is of wrong type'.
    Chez moi ça marche nickel ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
     
    SQL> var c clob
    SQL> exec :c:='select * from dual'
     
    PL/SQL procedure successfully completed.
     
    SQL> var r refcursor
    SQL> exec open :r for :c
     
    PL/SQL procedure successfully completed.
    Prochaine fois, précise ta version

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    Chez moi ça marche nickel ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
     
    SQL> var c clob
    SQL> exec :c:='select * from dual'
     
    PL/SQL procedure successfully completed.
     
    SQL> var r refcursor
    SQL> exec open :r for :c
     
    PL/SQL procedure successfully completed.
    Prochaine fois, précise ta version
    Je travaille sur la version 9i.
    Chez moi ca donne ca : PLS-00382: expression is of wrong type

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    la réponse est donc, CLOB ne fonctionne qu'à partir de la 11g

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    la réponse est donc, CLOB ne fonctionne qu'à partir de la 11g
    Je comprend pourquoi cette erreur.
    y'a t'il un autre moyen ?

  13. #13
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par voyageur Voir le message
    y'a t'il un autre moyen ?
    oui

    tu employes le type varchar2a (table de varchar2(32767)) et DBMS_SQL.OPEN_CURSOR

Discussions similaires

  1. ORA-00900 pour un "open cursor for"
    Par jadey dans le forum PL/SQL
    Réponses: 2
    Dernier message: 23/10/2009, 18h08
  2. Cursor For avec requête prédéfinie
    Par ilalaina dans le forum PL/SQL
    Réponses: 4
    Dernier message: 12/05/2009, 15h01
  3. PLS-00201 sur un OPEN cursor FOR
    Par tibal dans le forum PL/SQL
    Réponses: 4
    Dernier message: 24/11/2008, 21h38
  4. Réponses: 9
    Dernier message: 20/06/2007, 17h34
  5. [ASE] Les locks avec un cursor for update
    Par PiyuXYZ dans le forum Sybase
    Réponses: 1
    Dernier message: 11/02/2006, 13h17

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