Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 htp.p and ORA-06512  [new]
Alex Zhulin
Member

Откуда:
Сообщений: 56
Добрый день!
Есть сервер Oracle 11G
Пытаюсь выполнить процедуру

procedure test_ppo is
begin
htp.p('<?xml version = "1.0" encoding = "Windows-1251"?>');
htp.p('<report>');
htp.p('<answer>');
for i in 1 .. 100 loop
htp.p('<test>'||'test '||i||'</test>');
end loop;
htp.p('</answer>');
htp.p('</report>');
end;

Проблем нет
Но если вставляю кириллицу

procedure test_ppo is
begin
htp.p('<?xml version = "1.0" encoding = "Windows-1251"?>');
htp.p('<report>');
htp.p('<answer>');
for i in 1 .. 100 loop
htp.p('<test>'||'Тест '||i||'</test>');
end loop;
htp.p('</answer>');
htp.p('</report>');
end;

То при вызове получаю ошибку

ORA-06502: PL/SQL: numeric or value error: character string buffer too small<br>
ORA-06512: at "SYS.HTP", line 1550<br>
ORA-06512: at "SYS.HTP", line 1735<br>
ORA-06512: at "EXCELLENT.TEST_FUNCS", line 10<br>

Переполнение буфера происходит при использовании кириллицы.
Подскажите, пжл., почему?
4 ноя 12, 20:10    [13420796]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
dba123
Member

Откуда:
Сообщений: 1054
Alex Zhulin,

Вы в плюсе ошибку получаете или в браузере?
6 ноя 12, 09:10    [13424605]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
вот тут похожие проблемы:
http://muzso.hu/2012/09/05/the-htp.p-procedure-in-oracle-rdbms-does-not-work-well-with-multibyte-charactersets
http://www.orafaq.com/forum/t/101943/2/
наверно стоит посмотреть
6 ноя 12, 10:17    [13424819]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Байт Байтович
Guest
select lengthb('Test'), lengthb('Тест')
from dual
6 ноя 12, 11:49    [13425367]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
непонятно
Guest
Alex Zhulin,

автор
ORA-06512: at "EXCELLENT.TEST_FUNCS", line 10<br>

и
автор
procedure test_ppo

может не там смотрим
6 ноя 12, 12:49    [13425861]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Alex Zhulin
Member

Откуда:
Сообщений: 56
dba123
Alex Zhulin,

Вы в плюсе ошибку получаете или в браузере?


В браузере ошибка.

Байт Байтович
select lengthb('Test'), lengthb('Тест')
from dual


Вижу, что второе выражение получается в два раза больше.
Предполагаю, что из-за этого:

SELECT * FROM nls_database_parameters
WHERE parameter like 'NLS%CHARACTERSET';

PARAMETER VALUE
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16

Нашел похожее решение проблемы вот здесь [url=]http://www.donotcommit.net/?p=158[/url]

Сделал alter system set NLS_LENGTH_SEMANTIC='CHAR';
Но после рестарта базы NLS_LENGTH_SEMANTIC вернулся обратно в BYTE

Как сделать параметр NLS_LENGTH_SEMANTIC = CHAR?
И в том ли я направлении двигаюсь?
6 ноя 12, 14:20    [13426608]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Alex Zhulin
Member

Откуда:
Сообщений: 56
init.ora,

Спасибо за ссылки.
Первую видел, но, честно говоря не нашел там решения своей проблемы. Точнее вообще не увидел решения проблемы (может невнимательно читал?)
Во второй ссылке автор хвастается, что написал свой аналог htp.p (боюсь, что это мне не подойдет :-))
6 ноя 12, 14:37    [13426726]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Байт Байтович
Guest
А не проще ли просто глянуть EXCELLENT.TEST_FUNCS и там поправить цифорку в длине или же заменить на varchar2(* char)?
6 ноя 12, 14:39    [13426745]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
dba123
Member

Откуда:
Сообщений: 1054
Alex Zhulin,

а PlsqlNLSLanguage настроен как в dads.readme сказано
6 ноя 12, 14:52    [13426842]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Alex Zhulin
Member

Откуда:
Сообщений: 56
Байт Байтович
А не проще ли просто глянуть EXCELLENT.TEST_FUNCS и там поправить цифорку в длине или же заменить на varchar2(* char)?


Так проблема не в EXCELLENT.TEST_FUNCS, а в переполнении буфера в htp.p
6 ноя 12, 15:03    [13426938]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Alex Zhulin
Member

Откуда:
Сообщений: 56
dba123
Alex Zhulin,

а PlsqlNLSLanguage настроен как в dads.readme сказано


Sorry, из меня администратор еще тот... Можете поподробнее сказать, где смотреть?
6 ноя 12, 15:04    [13426956]     Ответить | Цитировать Сообщить модератору
 Re: htp.p and ORA-06512  [new]
Alex Zhulin
Member

Откуда:
Сообщений: 56
Возможно я поступил "не спортивно" ;-), но я победил эту фигню, отредактировав пакет htp

Изменил длину переменной в заголовке пакета

--type htbuf_arr is table of varchar2(256) index by binary_integer;
type htbuf_arr is table of varchar2(512) index by binary_integer;

И длину переменной в теле пакета

--htcurline varchar2(256) := ''; -- htbuf_arr element size
htcurline varchar2(512) := ''; -- htbuf_arr element size
7 ноя 12, 22:48    [13436508]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: htp.p and ORA-06512  [new]
AlexVin
Member

Откуда: E-burg
Сообщений: 1055
Doc ID 760084.1
begin
owa.num_cgi_vars := 0;
HTP.HTBUF_LEN := 128;
htp.init;
htp.htmlopen;
htp.p(rpad('Ф',500,'Ы'));
htp.htmlclose;
owa_util.showpage;
end;
25 май 18, 15:22    [21440672]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить