web-dev-qa-db-fra.com

Comment augmenter le tampon dbms_output?

J'ai essayé de déboguer ma requête dynamique via dbms_output mais la chaîne de requête semble trop longue pour dbms_output tampon.

J'ai eu :

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_OUTPUT", line 148
ORA-06512: at line 1 

Une idée comment augmenter la taille du tampon?

17
hsuk

Vous pouvez activer DBMS_OUTPUT et définir la taille du tampon. La taille du tampon peut être comprise entre 1 et 1 000 000.

dbms_output.enable(buffer_size IN INTEGER DEFAULT 20000);
exec dbms_output.enable(1000000);

Cochez this

[~ # ~] modifier [~ # ~]

Selon le commentaire publié par Frank et Mat, vous pouvez également l'activer avec Null

exec dbms_output.enable(NULL);

buffer_size : Limite supérieure, en octets, la quantité d'informations mises en mémoire tampon. La définition de buffer_size sur NULL indique qu'il ne doit pas y avoir de limite. La taille maximale est de 1 000 000 et la valeur minimale de 2 000 lorsque l'utilisateur spécifie buffer_size (NOT NULL).

31
Gopesh Sharma

Lorsque la taille du tampon est pleine. Vous pouvez essayer plusieurs options:

1) Augmentez la taille du tampon DBMS_OUTPUT à 1 000 000

2) Essayez de filtrer les données écrites dans le tampon - il existe peut-être une boucle qui écrit dans DBMS_OUTPUT et vous n'avez pas besoin de ces données.

3) Appelez ENABLE à différents points de contrôle de votre code. Chaque appel effacera le tampon.

DBMS_OUTPUT.ENABLE (NULL) sera par défaut à 20000 pour la compatibilité descendante documentation Oracle sur dbms_output

Vous pouvez également créer votre affichage de sortie personnalisé.

create or replace procedure cust_output(input_string in varchar2 )
is 

   out_string_in long default in_string; 
   string_lenth number; 
   loop_count number default 0; 

begin 

   str_len := length(out_string_in);

   while loop_count < str_len
   loop 
      dbms_output.put_line( substr( out_string_in, loop_count +1, 255 ) ); 
      loop_count := loop_count +255; 
   end loop; 
end;

Link -Ref: Alternative à dbms_output.putline @ Par: Alexander

3
popats.

Voici:

DECLARE
BEGIN
  dbms_output.enable(NULL); -- Disables the limit of DBMS
  -- Your print here !
END;