ƒобро пожаловать в форум, Guest††>>†† ¬ойти†|†–егистрац舆| ѕоиск†|†ѕравила†| ¬ избранное | ѕодписатьс€
¬се форумы / Oracle Ќовый топик †† ќтветить
  одировка строки в пакете  [new]
pixela
Member

ќткуда: —анкт-ѕетербург
—ообщений: 97
 лонировал базу с прода на тестовую машину и на ней столкнулс€ со странной ситуацией.
ѕопробую описать:

¬ одном пакете есть "зашита€" строка, котора€ передаетс€ на вход процедуры из другого пакета, и там эта строка посимвольно в цикле обрабатываетс€ SUBSTR и каждый символ из этой строки записываетс€ в переменную char(1).
» тут на первом же символе - ORA-06502: PL/SQL: numeric or value error: character string buffer too small

PL/SQL Developer в дебагере корректно показывает строку, котора€ пришла на вход процедуры, но чую, что со строкой всЄ же что-то не так. ѕо€сню на примере:
SQL> select substr('“ест',1, 1) from dual;
SUBSTR('“≈—“',1,1)
----------------------SQL> select substr('ƒа,Ќет,Ќе определено,',1, 1) from dual;
SUBSTR('–Ф–Ю–Ь,–Ъ–Т–Р–†–Ґ–Ш–†–
------------------------------
ƒ

ѕерва€ строка "“ест" напечатано мной, а втора€ строка "ƒа,Ќет,Ќе определено" - вз€та из дебагера.
«десь видно, что после выполнени€ запроса во второй строке кракоз€бры (SUBSTR('–Ф–Ю–Ь,–Ъ–Т–Р– –Ґ–Ш– –)

ѕримечание:
1. Ќа проде описанна€ ситуаци€ не про€вл€етс€
2.  лонирование осуществл€лось expdp/impdp full=y
8 но€ 16, 17:39††††[19871570]     ќтветить | ÷итировать —ообщить модератору
 Re:  одировка строки в пакете  [new]
pixela
Member

ќткуда: —анкт-ѕетербург
—ообщений: 97
”пс, оказалось еще чудесатей...

Ќа проде этот блок
declare 
  s varchar2(1);
begin
  s := substr('“ест', 1, 1);
end;

выполн€етс€ без ошибки.
ј на тестовой - всЄ та же ошибка: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
8 но€ 16, 18:05††††[19871709]     ќтветить | ÷итировать —ообщить модератору
 Re:  одировка строки в пакете  [new]
йф€
Guest
сравни CHARACTERSET'ные параметры баз

SELECT *
FROM nls_database_parameters
8 но€ 16, 18:17††††[19871743]     ќтветить | ÷итировать —ообщить модератору
 Re:  одировка строки в пакете  [new]
локатор
Guest
pixela,

а так?

declare
s varchar2(1 char);
begin
s := substr('“ест', 1, 1);
dbms_output.put_line(s);
end;


utf8?
8 но€ 16, 18:26††††[19871778]     ќтветить | ÷итировать —ообщить модератору
 Re:  одировка строки в пакете  [new]
Elic
Member

ќткуда:
—ообщений: 29979
йф€
сравни CHARACTERSET'ные параметры баз
NLS_LENGTH_SEMANTIC
8 но€ 16, 18:55††††[19871858]     ќтветить | ÷итировать —ообщить модератору
 Re:  одировка строки в пакете  [new]
andrey_anonymous
Member

ќткуда: ћосква
—ообщений: 18347
Elic
йф€
сравни CHARACTERSET'ные параметры баз
NLS_LENGTH_SEMANTIC


¬ данном конкретном случае
pixela
SQL> select substr('ƒа,Ќет,Ќе определено,',1, 1) from dual;
SUBSTR('–Ф–Ю–Ь,–Ъ–Т–Р–†–Ґ–Ш–†–
------------------------------
ƒ


все-таки начать следует с банального NLS_LANG и буквар€ к нему :)
9 но€ 16, 02:44††††[19872565]     ќтветить | ÷итировать —ообщить модератору
¬се форумы / Oracle ќтветить