Проблемы с NLS?

whoami
Дата: 03.08.2005 15:31:26
Доброго времени суток
решил попробывать поставить oracle database на AIX
запускаю на выполнение такой вот блок:
declare
str1 varchar2(100);
begin
STR1 := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'; --меньше ста
end;

вываливается ошибка:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 4

Подскажите что не так сделал?

NLS_LANG=AMERICAN
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

запрашиваю nls_database_parameters а там:
NLS_CHARACTERSET=AL32UTF8

видимо в этом проблема. Как поправить?. Заранее спасибо.
Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit
Apex
Дата: 03.08.2005 15:37:40
У тебя в символах или в байтах размер по умолчанию берется?
1
Дата: 03.08.2005 15:37:56
так сработает?
declare
str1 varchar2(100 char);
begin
STR1 := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'; --меньше ста
end;
whoami
Дата: 03.08.2005 15:39:14
хотя
select length('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя') from dual

дает 66 :(
whoami
Дата: 03.08.2005 15:42:23
to 1: Спасибо, работает!.. А почему?? У меня приложение такой запрос генерит я его никак править не могу( Настроить можно?
Apex
Дата: 03.08.2005 15:44:22
whoami
to 1: Спасибо, работает!.. А почему?? У меня приложение такой запрос генерит я его никак править не могу( Настроить можно?

Я ж тебя спросил, у тебя размер в символах или байтах по умолчанию? Выходит что в байтах...
whoami
Дата: 03.08.2005 15:46:53
2 Apex: Если я Вас правильно понял:
NLS_COMP = BINARY
NLS_LENGTH_SEMANTICS=BYTE
NLS_NCHAR_CHARACTERSET=UTF8
Apex
Дата: 03.08.2005 15:49:49
whoami
2 Apex: Если я Вас правильно понял:
NLS_COMP = BINARY
NLS_LENGTH_SEMANTICS=BYTE
NLS_NCHAR_CHARACTERSET=UTF8

Правильно. Поставь nls_length_semantics в char и не придется каждый раз уточнять в чем выделять размер для переменных.
whoami
Дата: 04.08.2005 10:06:17
Спасибо, получилось
whoami
Дата: 04.08.2005 11:03:49
нет, поторопился.
Что-то не срослось

SQL> show parameter NLS_LENGTH_SEMANTICS

NAME                                 TYPE        VALUE
------------------------------------ ----------- 
nls_length_semantics                 string      CHAR

SQL> select value from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS';

VALUE
----------------------------------------
BYTE

блок, который приводил ранее, заработал. Но. У меня задача влить данные в бд импортом, а на протяжении всего импорта встречались ошибки 01401 inserted value too large for column

вычитал в reference такую вот шляпу:
NLS_LENGTH_SEMANTICS does not apply to tables in SYS and SYSTEM. The data
dictionary will always use byte semantics regardless. Also, NCHAR, NVARCHAR,
CLOB, and NCLOB are always character-based.

Посмотрел на серваке под управление винды, параметр NLS_LENGTH_SEMANTICSNLS выставлен по умолчанию, т.е. в byte. Но итаких прикольв нет на нем.

Подскажите как побаролть, плз.