it-swarm.com.de

Wie kann man den Puffer von dbms_output erhöhen?

Ich habe versucht, meine dynamische Abfrage über dbms_output Zu debuggen, aber es scheint, als wäre die Abfragezeichenfolge zu lang für den Puffer dbms_output.

Ich habe :

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 

Irgendeine Idee, wie man die Puffergröße erhöht?

17
hsuk

Sie können DBMS_OUTPUT aktivieren und die Puffergröße festlegen. Die Puffergröße kann zwischen 1 und 1.000.000 liegen.

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

Check this

[~ # ~] edit [~ # ~]

Gemäß dem Kommentar von Frank und Mat können Sie ihn auch mit Null aktivieren

exec dbms_output.enable(NULL);

buffer_size : Obere Grenze in Bytes für die Menge der gepufferten Informationen. Das Setzen von buffer_size auf NULL gibt an, dass es keine Begrenzung geben soll. Die maximale Größe beträgt 1.000.000 und die minimale Größe 2.000, wenn der Benutzer buffer_size (NOT NULL) angibt.

31
Gopesh Sharma

Wenn die Puffergröße voll wird. Es gibt verschiedene Möglichkeiten, die Sie ausprobieren können:

1) Erhöhen Sie die Größe des DBMS_OUTPUT-Puffers auf 1.000.000

2) Versuchen Sie, die in den Puffer geschriebenen Daten zu filtern. Möglicherweise gibt es eine Schleife, die in DBMS_OUTPUT schreibt, und Sie benötigen diese Daten nicht.

3) Rufen Sie ENABLE an verschiedenen Kontrollpunkten in Ihrem Code auf. Jeder Aufruf löscht den Puffer.

DBMS_OUTPUT.ENABLE (NULL) wird aus Gründen der Abwärtskompatibilität standardmäßig auf 20000 gesetzt Oracle-Dokumentation zu dbms_output

Sie können auch Ihre benutzerdefinierte Ausgabeanzeige erstellen

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 zu dbms_output.putline @ Von: Alexander

3
popats.

Bitte schön:

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