понедельник, 26 апреля 2010 г.

Локализация в ODI

В ходе разбора различных KM обнаружилось, что все они требуют доработок для корректной выгрузки и загрузки кириллицы.
Вот некоторые из них:

1) Модуль LKM MSSQL to Oracle (bcp,sqlldr). Чтобы выгрузка из MSSQL происходила c учетом кодовой страницы 1251 нужно добавить соотв-й параметр в конец строки формирования bcp на шаге 191. BCP out data to temporary bcp file

На Sunopsys API это выглядит так:
<%out.print(" -C"+odiRef.getOption("MSSQL_FILE_ENCODING"));%>

Здесь задана опция MSSQL_FILE_ENCODING с типом Value и значением по умолчанию = 1251

Результат будет например следующим:

C:\"Program Files"\"Microsoft SQL Server"\90\Tools\Binn\bcp my_db.dbo.AGREEMENT out C:/Temp/dump.bcp -c -S192.168.10.01 -Uuser -Ppassword -t @#$% -C1251

2) Модуль LKM MSSQL to Oracle (bcp,sqlldr). Загрузка sqlldr происходит с учетом клиентских настроек машины. Часто разделитель на клиенте и сервере не совпадают и SQLLOADER выдает ошибки. Что бы в ODI изменять параметр NLS_NUMERIC_CHARACTERS надо выполнять команду ОС в шаге Call SQLLoader via Jython.

Чтобы задать это с помощью Option, создадим новую опцию O_NNC c Type = Text и Default Value = .,
а для получения структуры "set NLS_NUMERIC_CHARACTERS=.," мы добавим в начале в этом шаге:

exitCode = os.putenv(r"NLS_NUMERIC_CHARACTERS","<%
NNC=odiRef.getOption("O_NNC");
out.print(NNC);
%>")

Теперь перед запуском будет выполнена команда set NLS_NUMERIC_CHARACTERS=".," и после этого примутся все записи с разделителем "точка". Вот что получим в итоге:

import os

exitCode = os.putenv(r"NLS_NUMERIC_CHARACTERS",".,")
exitCode = os.system(r"sqlldr control=C:/Temp/X1240101.ctl log=C:/Temp/X1240101.log userid=proto2/<@=snpRef.getInfo("DEST_PASS") @>@orcl > C:/Temp/X1240101.out")

if (exitCode<>0 and exitCode<>2) :
raise("SQLLDR failure(s)");


3) Модуль LKM Excel to Oracle
Для возможности делать Reverse excel-структуры надо создать ODBC, к нему Sun-JDBC-ODBC Bridge а в самом Excel файле создать Range - выделить диапазон вместе с заголовком, далее правая кнопка - Name A Range и задать Имя Диапазона. После этого при Selective Reverse - Objects to Reverse будет доступен это Range.

Также для возможности корректно исп-ть кириллицу, надо в настройках Data Server к Excel прописать в Description key charSet = cp1251.

Надеюсь, кому-нибудь сэкономит время.

Комментариев нет:

Отправить комментарий