Как увеличить буфер 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
Любая идея о том, как увеличить размер буфера?
Ответы
Ответ 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;