Текущее время: Вс, июн 22 2025, 16:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Ora_CL8MSWIN1251 -> SAP_BW_WE8DEC convert\translate ???
СообщениеДобавлено: Пн, мар 14 2005, 14:59 
Гость
Уважаемые Гуру! К Вам вопрос:

Сформулируйте правильный выход из следующей ситуации :
Есть SAP BW (на Oracle 8.1.7), у него NLS_CHARACTERSET=WE8DEC, и NLS_NCHAR тоже. Когда хожу на этот оракл с NLS_LANG=WE8DEС, создаю в базе таблицу ручками заношу данные (пишу по русски ).
Потом в SAP BW - делаю подмену после которой, эта таблица выглядит как BW источник ( создаём в BW табл. происходит её регистрация в в АBAP словаре, потом в Оracle её удаляем и создаём с тем же название свою со своими данными). Потом с помошью подпрогаммы translate делаю преобразование из 1504 в 1500 (т.е. из CL8MSWIN1251 в CL8ISO8859P5) и загоняю эти данные куда-нибудь, и смотрю через клиент и всё нормально отображается - как и было внесено в таблицу.
(в переменных огружения моей win2k SAP_CODEPAGE=1504).

а теперь когда надо перетащить данные из другой Оracle (9.2.0.6) базы, происходит нехорошее, всё символы толи іііі, то ????.
Я не хочу выдвигать догадки почему так происходит, я знаю одно, что WE8DEС "не знает русского", т.е. CL8MSWIN1251 и перетаскивание данных через DB_link не будет корректным.

Может вы знаете достаточно простое решение этой проблемы, например создание некого file1000_WE8DEС_MY_SAP_BW.nlb в oracle, с помощью Locale Builder, который будет делать преобразование через convert('мой текст','desct_characterset','source_characterset'), таким образом, чтобы созданная CHARCTERSET=WE8DEС_MY_SAP_BW понимала русский при выполнение convert.

или же преобразовать на стороне оракла (источника) все VARCHAR(и CHAR) в бинарный\HEX вид, а потом BW заставить понимать "бинарный\HEX" и преобразовывать его как надо в "локали".
???????????? - КОНЕЦ ВОПРОСА Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!

На сём кланяюсь, и буду с нетерпением ждать ответа.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 14 2005, 17:12 
Гость
ВСЁ придумал, помог этот форум - предыдущая тема.
Расказываю (вариант на половину сырой ):

На стороне BW в Oracle делаем функцию :
--------------------------------------------------------
create or replace function hex_to_raw(inhex varchar2) return varchar2 as
inhex_work varchar2(2000);
hex1 varchar2(2000);
hex2 varchar2(2000);
decimal_number number;
ascii_char varchar2(2000);
return_string varchar2(2000);
begin
inhex_work := rtrim(ltrim(inhex));
if length(inhex_work) is null then
return NULL;
end if;
hex1 := substr(inhex_work,1,1);
hex2 := substr(inhex_work,2,1);
loop
if instr(hex1,'A') = 1 Then
hex1 := '10';
elsif instr(hex1, 'B') = 1 Then
hex1 := '11';
elsif instr(hex1, 'C') = 1 Then
hex1 := '12';
elsif instr(hex1, 'D') = 1 Then
hex1 := '13';
elsif instr(hex1, 'E') = 1 Then
hex1 := '14';
elsif instr(hex1, 'F') = 1 Then
hex1 := '15';
end if;
if instr(hex2, 'A') = 1 Then
hex2 := '10';
elsif instr(hex2, 'B') = 1 Then
hex2 := '11';
elsif instr(hex2, 'C') = 1 Then
hex2 := '12';
elsif instr(hex2, 'D') = 1 Then
hex2 := '13';
elsif instr(hex2, 'E') = 1 Then
hex2 := '14';
elsif instr(hex2, 'F') = 1 Then
hex2 := '15';
end if;
decimal_number := to_number(hex1) * 16 + to_number(hex2);
ascii_char := chr(decimal_number);
return_string := concat(return_string, ascii_char);
inhex_work := substr(inhex_work, 3);
if inhex_work is null then
return return_string;
exit;
end if;
hex1 := substr(inhex_work,1,1);
hex2 := substr(inhex_work,2,1);
end loop;
end;
---------------------------------------------------------------------------
На строне базы источника делаем View на интересующие нас таблицы, по
примеру:
-------------------------------------
create or replace view scott.temp2 as
select
rawtohex(empno) empno,
rawtohex(ename) ename
from SCOTT.EMP
---------------------------------------
для примера, меня интересуют два поля : empno и ename.

Основное что мы делаем, это rawtohex ( см. select rawtohex('моё_слово') from dual ).


Потом на стороне BW делаем DB_link и смортим на эту "view scott.temp2" .

SELECT hex_to_raw(empno), hex_to_raw(ename) FROM temp2@ORCLDWH ,

где ORCLDWH - имя DB_link, он же мой SID ( я занёс в scott.emane - русские буквы )


Всё - проблема закрыта.

Всем спасибо, сегодня я себя угощаю пивом


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 14 2005, 18:18 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Ср, авг 18 2004, 10:59
Сообщения: 754
Откуда: Moscow
Ну и наворотил :lol:

_________________
Фарш невозможно провернуть назад,
И мясо из котлет не восстановишь


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:   Тема решена
СообщениеДобавлено: Вт, мар 15 2005, 12:47 
Гость
MakcuM написал(а):
Ну и наворотил :lol:

Тут всё чисто - у меня работает ( Волки сыты овцы целы)


Пометить тему как нерешенную
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB