Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_fehler_oru-10027

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

prog:sql_fehler_oru-10027 [2013/10/21 14:49] – angelegt gpipperrprog:sql_fehler_oru-10027 [2013/10/21 21:17] (aktuell) gpipperr
Zeile 1: Zeile 1:
 +====Eine PL/SQL Routine wirft den Fehler ORU-10027 - DBMS_OUTPUT Buffer zu klein =====
 +
 +Eine PL/SQL Routine funktioniert einwandfrei in SQL*Plus und wirft plötzlich in der Entwicklungsumgebung einen Fehler "**ORU-10027: buffer overflow, limit 10000 Byte**".
 +
 +
 +Eine erste Analyse des eigentlichen Programmcodes ergibt keinen Fehler.
 +
 +Fehlerstack:
 +
 +<code sql>
 +
 +ERROR at line 1:
 +ORA-20100: An error occured. ORA-20000
 +ORU-10027: buffer overflow, limit of 2000 bytes
 +ORA-06512: in "GPI.EM$TOOLS", Zeile 106
 +
 +</code>
 +
 +Der Fehler liegt aber gar nicht in der PLSQL Routine, sondern in der Verwendung von DBMS_OUTPUT!
 +
 +Der Buffer für DBMS_OUTPUT war in der Entwicklungsumgebung einfach per Default zu klein eingestellt.
 +
 +===Test in SQL*Plus:===
 +
 +Setzen des Buffers für DBMS_OUTPUT auf den kleinsten möglichen Wert:
 +<code sql>
 +set serveroutput on size 2000
 +
 +
 +begin
 +  for i in 1..20
 +   loop
 +    dbms_output.put_line(rpad('Test run ',100,'X')||':'||i);
 +  end loop;
 +end;
 + /
 +
 +.....
 +Test run XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
 +.....
 +
 +ERROR at line 1:
 +ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
 +ORA-06512: in "SYS.DBMS_OUTPUT", Zeile 32
 +ORA-06512: in "SYS.DBMS_OUTPUT", Zeile 97
 +ORA-06512: in "SYS.DBMS_OUTPUT", Zeile 112
 +ORA-06512: in Zeile 4
 +...
 +
 +</code>
 +
 +===Abhilfe:===
 +
 +  * Setzen der Buffersize in der eigentlichen PL/SQL Routine mit ** DBMS_OUTPUT.ENABLE(1000000) **
 +  * Setzen der Buffersize mit **set serveroutput on size 1000000**" in SQL*Plus
  
prog/sql_fehler_oru-10027.txt · Zuletzt geändert: 2013/10/21 21:17 von gpipperr