Консультация № 55504
15.09.2006, 06:28
0.00 руб.
0 2 1
Здраствуйте всем
Приложение ниже.
Вначале програмка отработала хорошо(достала все данные).
А затем начала выкидывать ошибки(ниже в приложении).
Причем пробовал по разному:
Когда установлено SET SERVEROUTPUT OFF, то все PL/SQL procedure successfully completed.(но вывода-то нет).
А когда - SET SERVEROUTPUT ON, то - выдает часть данных и ошибки переполнения буфера -
ERROR at line 1:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: at "SYS.DBMS_OUTPUT", line 91
ORA-06512: at "SYS.DBMS_OUTPUT", line 58
ORA-06512: at line 17
Кто может подсказать - в чем дело ?

Приложение:
DECLARE 2 i NUMBER:=1; 3 BEGIN 4 FOR REC IN (SELECT DISTINCT T.TA, T.NA 5 FROM ST_ADEF T 6 WHERE T.D_REG >= TO_DATE(‘01.09.2006‘,‘dd.mm.yyyy‘) AND T.CV = ‘04410‘) 7 LOOP 8 -------------------------- 9 FOR REC2 IN (SELECT TA,NA,DV,DU,LP,SA.KD,K.NDF 10 FROM ST_ADEF SA, KDEF K 11 WHERE SA.TA = REC.TA 12 AND SA.NA = REC.NA 13 AND SA.KD = K.KD 14 AND SA.DF = K.DF 15 AND SA.MD = K.MD) 16 17 LOOP DBMS_OUTPUT.PUT_LINE(REC2.TA || ‘ ‘ || REC2.NA || ‘ ‘ || REC2.DV || ‘ ‘ || 18 REC2.DU || ‘ ‘ || REC2.LP || ‘ ‘ || REC2.KD || ‘ ‘ || REC2.NDF); 19 END LOOP; 20 ------------------------- 21 DBMS_OUTPUT.PUT_LINE(‘******************************‘||i); 22 i:=(i+1); 23 --(REC.TA || ‘ ‘ || REC.NA || ‘ ‘ || REC.DU || ‘ ‘ || REC.LP || ‘ ‘ || REC.KD); 24 END LOOP; 25 END; 26 / часть данных.......................... ******************************1 часть данныхDECLARE*ERROR at line 1:ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes ORA-06512: at "SYS.DBMS_OUTPUT", line 91 ORA-06512: at "SYS.DBMS_OUTPUT", line 58 ORA-06512: at line 17 SQL> SET SERVEROUTPUT OFFSQL> DECLARE 2 i NUMBER:=1; 3 BEGIN 4 FOR REC IN (SELECT DISTINCT T.TA, T.NA 5 FROM ST_ADEF T 6 WHERE T.D_REG >= TO_DATE(‘01.09.2006‘,‘dd.mm.yyyy‘) AND T.CV = ‘04410‘) 7 LOOP 8 -------------------------- 9 FOR REC2 IN (SELECT TA,NA,DV,DU,LP,SA.KD,K.NDF 10 FROM ST_ADEF SA, KDEF K 11 WHERE SA.TA = REC.TA 12 AND SA.NA = REC.NA 13 AND SA.KD = K.KD 14 AND SA.DF = K.DF 15 AND SA.MD = K.MD) 16 17 LOOP DBMS_OUTPUT.PUT_LINE(REC2.TA || ‘ ‘ || REC2.NA || ‘ ‘ || REC2.DV || ‘ ‘ || 18 REC2.DU || ‘ ‘ || REC2.LP || ‘ ‘ || REC2.KD || ‘ ‘ || REC2.NDF); 19 END LOOP; 20 ------------------------- 21 DBMS_OUTPUT.PUT_LINE(‘******************************‘||i); 22 i:=(i+1); 23 --(REC.TA || ‘ ‘ || REC.NA || ‘ ‘ || REC.DU || ‘ ‘ || REC.LP || ‘ ‘ || REC.KD); 24 END LOOP; 25 END; 26 /PL/SQL procedure successfully completed.SQL> SET SERVEROUTPUT ONSQL> DECLARE 2 i NUMBER:=1; 3 BEGIN 4 FOR REC IN (SELECT DISTINCT T.TA, T.NA 5 FROM ST_ADEF T 6 WHERE T.D_REG >= TO_DATE(‘01.09.2006‘,‘dd.mm.yyyy‘) AND T.CV = ‘04410‘) 7 LOOP 8 -------------------------- 9 FOR REC2 IN (SELECT TA,NA,DV,DU,LP,SA.KD,K.NDF 10 FROM ST_ADEF SA, KDEF K 11 WHERE SA.TA = REC.TA 12 AND SA.NA = REC.NA 13 AND SA.KD = K.KD 14 AND SA.DF = K.DF 15 AND SA.MD = K.MD) 16 17 LOOP DBMS_OUTPUT.PUT_LINE(REC2.TA || ‘ ‘ || REC2.NA || ‘ ‘ || REC2.DV || ‘ ‘ || 18 REC2.DU || ‘ ‘ || REC2.LP || ‘ ‘ || REC2.KD || ‘ ‘ || REC2.NDF); 19 END LOOP; 20 ------------------------- 21 DBMS_OUTPUT.PUT_LINE(‘******************************‘||i); 22 i:=(i+1); 23 --(REC.TA || ‘ ‘ || REC.NA || ‘ ‘ || REC.DU || ‘ ‘ || REC.LP || ‘ ‘ || REC.KD); 24 END LOOP; 25 END; 26 / часть данных.......................... ******************************1 часть данных DECLARE*ERROR at line 1:ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes ORA-06512: at "SYS.DBMS_OUTPUT", line 91 ORA-06512: at "SYS.DBMS_OUTPUT", line 58 ORA-06512: at line 17 SQL> quit

Обсуждение

Неизвестный
15.09.2006, 07:59
общий
это ответ
Здравствуйте, Slava_!
Ну в чем дело Вам сказал сам Oracle - "ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes" - Буфер переполнен, ограничение 2000 байт. Надо задать размер буфера. Следующая комманда включает вывод с переносом строк и устанавливает размер буфера в 1000000 байт - <b>SET SERVEROUTPUT ON SIZE 1000000 FROMAT WRAPPED</b>
Неизвестный
15.09.2006, 08:01
общий
Опечатка - FORMAT WRAPPED
Форма ответа