Как увеличить буфер dbms_output? - программирование
Подтвердить что ты не робот

Как увеличить буфер dbms_output?

Я попытался отлаживать свой динамический запрос с помощью dbms_output, но кажется, что строка запроса слишком длинна для буфера dbms_output.

Я получил:

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 

Любая идея о том, как увеличить размер буфера?

4b9b3361

Ответ 1

Вы можете включить DBMS_OUTPUT и установить размер буфера. Размер буфера может быть от 1 до 1000000.

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

Отметьте

ИЗМЕНИТЬ

В соответствии с комментарием, опубликованным Фрэнком и Мат, вы также можете включить его с помощью Null

exec dbms_output.enable(NULL);

buffer_size. Верхний предел, в байтах, объема буферизованной информации. Установка buffer_size в NULL указывает, что не должно быть ограничений. Максимальный размер составляет 1 000 000, а минимум - 2000, когда пользователь указывает buffer_size (NOT NULL).

Ответ 2

Когда размер буфера будет заполнен. Есть несколько вариантов, которые вы можете попробовать:

1) Увеличьте размер буфера DBMS_OUTPUT до 1 000 000

2) Попробуйте фильтровать данные, записанные в буфер - возможно, существует цикл, который записывает в DBMS_OUTPUT, и вам не нужны эти данные.

3) Вызовите ENABLE на разных контрольных точках в вашем коде. Каждый вызов очищает буфер.

DBMS_OUTPUT.ENABLE(NULL) по умолчанию будет 20000 для обратной совместимости Документация Oracle по dbms_output

Вы также можете создать свой пользовательский вывод display.something, как ниже фрагменты

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;

Ссылка -Ref: Альтернатива dbms_output.putline @Автор: Alexander

Ответ 3

Здесь вы идете:

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