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 :

Requêtes dynamiques longues


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Requêtes dynamiques longues
    Bonjour,

    j'ai une procédure stockée qui doit me renvoyer un ref cursor sur le résultat d'une requête dynamique, qui peut être très longue.
    Pour constituer ma requête une variable VARCHAR2 ne convient pas, j'ai besoin de davantage de capacité.
    J'ai donc trouvé la solution des VARCHAR2S, dans lesquels je stocke ma requête splitée.
    Elle est ensuite reconstituée grâce à un DBMS_SQL.PARSE.
    Le souci, c'est qu'à partir de là, je n'arrive pas à faire le lien avec le ref cursor que je doit envoyer ! Le DBMS_SQL.PARSE renvoit en effet un pointeur de type INTEGER...

    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
    FUNCTION search				
    		(...
    		)
    		RETURN pkg_search.result_refcur (type REF CURSOR)
    	IS
                    rqt VARCHAR2(256);
    		stmt DBMS_SQL.VARCHAR2S;
    		indx BINARY_INTEGER; 
    		intrefcur INTEGER;
    
             BEGIN
    
                    rqt := 'SELECT ....'
    	        stmt(1) := rqt;
    		indx := indx+1;
    
                    intrefcur := DBMS_SQL.OPEN_CURSOR ; 
    		DBMS_SQL.PARSE (intrefcur, stmt, stmt.FIRST, stmt.LAST, FALSE, DBMS_SQL.NATIVE);
                     
                    ???
    
     END;


    J'ai beaucoup cherché sur le net, en vain... Si vous voyez éventuellement d'autres solution pour gérer les requêtes longues et renvoyer un REF CURSOR...?

    Merci d'avance pour votre aide !

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est quoi ta limite de caractères pour être gêné ?
    En pl/sql le varchar2 max c'est 32767
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par McM
    C'est quoi ta limite de caractères pour être gêné ?
    En pl/sql le varchar2 max c'est 32767
    Dans ma requête, j'intègre des identifiants de personne (dont je veux récupérer des informations) + d'autres paramètres filtrant ; il peut y avoir jusqu'à plus de 10000 identifiants !!! Donc le Varchar2 est vraiment obsolète, ça bloque déjà pour 1500...

  4. #4
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    La meilleure solution, c'est finalement de passer par une table temporaire et d'insérer tout les éléments filtrants, puis de faire une jointure

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Declare ta variable de type LONG

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par cred09
    Dans ma requête, j'intègre des identifiants de personne (dont je veux récupérer des informations) + d'autres paramètres filtrant ; il peut y avoir jusqu'à plus de 10000 identifiants !!! Donc le Varchar2 est vraiment obsolète, ça bloque déjà pour 1500...
    comment est-ce que tu intègres tes 10'000 identifiants ?
    si c'est une liste de type IN (..., ...) ce type de liste ne supporte que 1000 entrées...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par cred09

    J'ai beaucoup cherché sur le net, en vain... Si vous voyez éventuellement d'autres solution pour gérer les requêtes longues et renvoyer un REF CURSOR...?

    Merci d'avance pour votre aide !
    Peut-être cette cette technique assez compliquée dans un article (en anglais) dans Oramag peut vous aider.

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

Discussions similaires

  1. Requête sur une requête dynamique...
    Par kluh dans le forum Access
    Réponses: 4
    Dernier message: 17/11/2005, 19h59
  2. [pb requête sql] Requête dynamique
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/09/2005, 12h31
  3. Erreur de conversion et requête dynamique dans une procédure
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/08/2005, 15h12
  4. [Procs stockées] [Débutant] Requête dynamique
    Par stailer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2005, 14h29
  5. Requête dynamique en pagination
    Par pascal_fluck@hotmail.com dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/03/2005, 16h04

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