oracle pl/sql bogue: ne peut pas put_line plus de 2000 caractères
Quelqu'un d'autre a remarqué ce phénomène où dbms_output.put_line
est impossible d'imprimer plus de 2000 caractères à la fois?
Script est:
set serveroutput on size 100000;
declare
big_str varchar2(2009);
begin
for i in 1..2009 loop
big_str := big_str||'x';
end loop;
dbms_output.put_line(length(big_str));
dbms_output.put_line(big_str);
end;
/
J'ai copié et collé à la sortie dans un éditeur de texte (Notepad++) qui m'a dit il n'y avait que 2000 caractères, pas de 2009, qui est ce que je pense doit avoir été collé. Cela arrive aussi avec quelques-uns de mes scripts de test - seulement 2000 caractères sont imprimés.
J'ai une solution pour imprimer comme ceci:
dbms_output.put_line(length(big_str));
dbms_output.put_line(substr(big_str,1,1999));
dbms_output.put_line(substr(big_str,2000));
Cela ajoute de nouvelles lignes à la sortie, il est difficile de lire le texte que vous travaillez avec est préformaté.
Quelqu'un d'autre a remarqué cela? Est-ce vraiment un bug ou d'une sorte de fonctionnalité obscure? Est-il une meilleure solution? Est-il d'autres informations sur cette?
Oracle version: 10.2.0.3.0, à l'aide de PL/SQL Developer (à partir de Allround Automation).
Ce qui vous fait penser que c'est un bug? Peut-être put_line est limitée par la conception de 2000 caractères.
Je n'ai rien vu dans le put_line documentation états pas plus de 2000 caractères seront imprimés. Aussi, si il y avait une limite de 2000 caractères et je l'ai dépassé, je en droit d'attendre d'une erreur, ne pas avoir tous les caractères après 2000 être ignoré.
Poneys: je l'ai découvert lorsque j'ai remarqué que les données imprimées ne correspondent pas à ce qui avait été chargé. Je savais qu'il y avait des enregistrements dans cette table qui serait assez long, j'ai été à enquêter pour savoir combien, et obtenir des détails sur les quelques-uns qui ont été.
OriginalL'auteur FrustratedWithFormsDesigner | 2009-11-19
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas une limitation à Oracle ou put_line, c'est une limitation avec votre IDE.
De la documentation d'Oracle : http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_output.htm#ARPLS036
Vous pouvez le tester à l'aide de SQL*Plus.
Le fait que vous voyez 2000, me conduit à penser qu'il y a un paramètre dans votre IDE c'est le réglage le minimum.
OriginalL'auteur David
Je ne connais pas de meilleure solution que de le diviser comme ça. Pour éviter que la nouvelle ligne à chaque appel, à l'exception de la dernière
dbms_output.put
au lieu dedbms_output.put_line
Je sais. Je vais vous dire comment éviter le désagrément des retours à la ligne, pas la façon d'éviter les multiples appels à dbms_output 🙂
OriginalL'auteur Dan
Selon TFM, le maximum de la taille de la ligne doit être 32767.
Je vous propose d'utiliser DBMS_OUTPUT.GET_LINE de lire le long de la ligne; si est tronqué, c'est un bug dans DBMS_OUTPUT. Si non, c'est un bug dans PL/SQL Developer.
OriginalL'auteur Erich Kitzmueller
Ne dbms_output.activer(1000000);
Ensuite, essayez...
set serveroutput on size 1000000;
mais j'ai essayé quand même, pas de changement.Que change le nombre de lignes qui sont possibles.
OriginalL'auteur ajdams
Votre question sonne comme il est lié à l'Encodage des Caractères Schéma de la base de données Oracle, vous êtes à l'exécution de votre script.
Oracle prend en charge les caractères codés sur un octet systèmes de codage, ce qui signifie (1 octet) = (1 caractère), et les jeux de caractères multioctets des schémas de codage qui signifie (x octets) = (1 caractère).
La VARCHAR2 type de données sémantique est par défaut en OCTETS, ce qui signifie que si le défaut n'a pas été modifié sur la base de données, puis VARCHAR2(2009) signifie que ce type de données est titulaire d'2009 OCTETS.
VARCHAR2 dans Oracle est un max limite de 4000 octets ce qui signifie que si votre base de données à l'aide de caractères à un octet schéma de codage de 4000 octets = 4000 caractères. Depuis votre code est uniquement la production de 2000 caractères, il est probablement une hypothèse sûre de votre base de données à l'aide d'un double-byte character schéma de codage.
Vous pouvez en lire plus à ce sujet à http://download-uk.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i1835. Ce lien est pour l'Oracle 11.1 de la base de données mais je ne pense pas que beaucoup de choses ont changé quand il s'agit de types de données.
J'espère que vous trouverez cette information utile.
-1, depuis varchar2 variables (pas de colonnes de la table) peut être plus long que la 4K, c'est à dire 32K
Merci carpenteri et ammoQ pour le rappeler. J'ai horriblement mal compris le contexte de la question. Mon appologies à tous ceux qui ont perdu leur temps à la lecture de ma réponse.
OriginalL'auteur Jeighmz
Essayer de régler le linesize dans SqlPlus.
Vous pouvez également définir la pagesize à une valeur inférieure.
OriginalL'auteur Philip Schlump