|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
Bonjour j'essaie d'afficher les résultats d'une requête en découpant les résultats en 3 (avec le LIMIT 3) mais visiblement le buffer est plein... je ne comprend pas pourquoi si on affiche 3 par 3 les résultats, cela devrait marcher et ne pas remplir le buffer ?
Voici mon code : Citation:
|
|
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
c'est quoi l'erreur exactement ? Sinon, le buffer est de 1000000 de caractères peu importe qu'ils arrivent pas paquet de 3 ou de 10000
|
|
|
00
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Inutile de dire que tu ne peut pas forcer le vidage de buffer avec un sort de flush Donc utilise UTL_FILE pour écrire dans un fichier ou bien une autre méthode. |
|
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
Bonjour,
Merci pour vos réponses. Je pensais qu'on pouvait soulager le buffer par le BULK COLLECT (d'ailleurs à quoi sert-il dans ces cas là ?) en affichant par paquet mais effectivement je crois que ce qui compte c'est la taille globale du buffer, il se remplit avec toutes les données, c'est exactement ce que je ne voulais pas. Un printf() aurait été idéal dans cette situation. Le problème est que je ne peux pas passer par un fichier, l'architecture actuelle ne le permet pas, comment je peux faire par une autre méthode ? Je n'ai pas très bien saisi ce concept ? Qu'est-ce que cela va changer par une autre méthode ? Merci d'avance. |
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
Le BULK COLLECT permet que chaque FETCH du curseur alimente n lignes dans le tableau (ici n = 3), d'où un gain de temps lors de l'exécution du curseur. D'ailleurs, tu pourrais aisément augmenter la valeur de LIMIT (500, 1000, 5000, ... à tester pour trouver la valeur optimale).
En aucun cas, le BULK COLLECT ne peut soulager le buffer du DBMS_OUTPUT. Tu trouveras ici des infos et tests de performance sur BULK COLLECT et FORALL : http://sheikyerbouti.developpez.com/pl_sql/?page=Chap5
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche ! |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Peut être utiliser DBMS_PIPE pour transmettre l'information vers un daemon qui va se charger de consummer le PIPE et d'afficher les informations par printf. Peut être écrire un programme extern en C, ou pour quoi pas en Java, qui fait le printf et l'appeler dans ton code Pl/SQL Peut être ... mais toute cela dépendent de tes besoins. |
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
Je n'ai pas suivi de près ton souci mais il me semble comprendre que tu as un problème de limitation de DBMS_OUTPUT.
Utilise la fonction DEBUG de Sheik Yerbouti de developpez.com. Je l'ai essayé, en l'adaptant pour mes propres besoins et ça fonctionne très bien |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
Merci pour toutes vos réponses.
Je vais tenter la méthode DEBUG. |
|
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
Bonjour,
voici le code que j'ai écrit mais j'ai encore un problème de buffer... je pense que je ne me sers pas bien de la méthode DEBUG, pouvez-vous m'aider ? Code :
|
||
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
en 10g tu peux essayer :
Sinon, bah faut afficher moins de caractères |
|
|
00
|
|
|
#11 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
le code :
n'a pas résolu le problème... ah je suis embêté avec ça, je pensais que la méthode DEBUG pouvais découper les résultats en les affichant... Je ne m'en sers peut être pas bien ? |
|
|
00
|
|
|
#12 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Tu affiches trop de caractères point... y'a rien n'a faire si ce n'est d'écrire dans un fichier (UTL_FILE) plutôt qu'à l'écran (DBMS_OUTPUT).
|
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
D'accord, peut être que ce n'est pas possible.
C'est juste que le post de phili_b avec la méthode DEBUG m'avait donné un espoir... Dans mon cas, je ne peut pas passer par un fichier car l'architecture en place est très rigide malheureusement... |
|
|
00
|
|
|
#14 | |
|
Membre éprouvé
![]() Inscription : mai 2002 Messages : 535 ![]() |
Citation:
PS : Avec l'espoir que la création d'une table soit moins "rigide"
__________________
Signé : Capitaine Jean-Luc Picard |
|
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
malheureusement le création d'une table est aussi rigide que de passer par un fichier...
|
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
Crées une table de test avec ta procédure dans l'environnement ci-dessous et je verrais si je peux faire quelque chose pour toi:
developpez.net: [APEX] Oracle en ligne pour vous pour vos requêtes Oracle |
|
|
00
|
|
|
#17 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Et ensuite vous le lancez pour les enregistrements 1 - 1000, 1001 - 2000, etc. |
|
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
j'ai retiré le au début du code et mis le dbms_output.enable(1000000); entre les balises begin/end, et augmenter la taille du buffer sous TOAD sous l'onglet DBMS_OUTPUT et ça a fonctionné !!
Merci pour toutes vos réponses ! |
|
|
00
|
|
|
#19 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
oui, évidemment il aurait fallu commencer par nous préciser l'outil
|
|
|
00
|
|
|
#20 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 116 ![]() |
Effectivement j'aurais dû préciser l'outil.
Par ailleurs, pour info, si vous lancez le script pl/sql depuis un script .ksh (un script shell) il faut ajouter en en-tête : mettre le : dbms_output.enable(1000000) entre les balises begin/end et là ça loggeras sans problèmes logiquement. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com