Ибанк - ЦФТ, загрузка свифт документов....
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
e.kha Участник со стажем
Вступление в Клуб: 26.04.2012
|
Ср Дек 19, 2012 10:06  Ибанк - ЦФТ, загрузка свифт документов.... |
|
Полезность: Нет оценки
|
Добрый день
Дано ибанк - банк клиент, ЦФТ.
На данный момент реализована загрузка рублевых документов... Принцип след. ибанк шлюз грузит данные документа в транзитную таблицу in_query в схеме ibs и вызывает хранимую процедуру , которая вызывает библиотечную процедуру из схемы ibs для обработки документа.
Делаю загрузку свифт документа, чтобы не дергать постоянно банк клиент, в in_query закинул один документ, написал операцию которая вызывает библиотечную процедуру и в общем что то написал. Через операцию работает, документы создается плюс комиссия.
Тестируем по схеме, ибанк шлюз загрузка в транзитную таблицу вызов хранимки, вываливается ошибка на очень простом действии
Код: | doc_rc_ref.[SUMMA] := to_number(trim(trs_doc.AMOUNT)); |
где doc_rc _ref ссылка на документ рц
trs_doc.AMOUNT char(2048), выглядит например вот так - 20.2
смотрю как сделана загрузка на рублях
и вижу что вызывается функция которая делает след. преобразование
Код: | function ToOraNumber(N varchar2) return number is
tmp_num number;
begin
tmp_num := to_number(replace(trim(N), '.', ','));
return tmp_num;
exception when others then
tmp_num := to_number(replace(trim(N), ',', '.'));
return tmp_num;
end;
|
причем тот же самый результат возвращает
Код: | to_number(trim(trs_doc.AMOUNT), '999999999999.99'); |
теперь присвоение к сумме проходит нормально но
при создании документов происходит обратное преобразование
из суммы в строку и тут возникает другая ошибка
ORA-20300: APP-PATTERN_DOC.LIB: Произошла ошибка при вычислении выражения расчета суммы!
Выражение: 20,2
Исходное выражение: [СУММА_ДОКУМЕНТА]
Ошибка: ORA-06550: Строка 1, столбец 19:
PLS-00103: Встретился символ "," в то время как ожидалось одно из следующих:
* & = - + ; < / > в in is mod remainder not rem
<показатель (**)> <> или != или ~= >= <= <> и or like like2
likec между || multiset member submultiset
Символ "* был вставлен перед "," для продолжения.
Проверяю обратное преобразование в строку - действительно выглядит
20,2, т.е. разделитель запятая...
Не могу понять что делать в этой ситуации. когда вызываю загрузку из
операции в навигаторе все нормально, когда загрузка вызывается из хранимки почему то появляются другие разделители... |
|
![](templates/subSilver/images/spacer.gif) |
yaffil Профи
Вступление в Клуб: 18.08.2011
|
Ср Дек 19, 2012 12:15   |
|
Полезность: Нет оценки
|
Передавайте в нужном формате, чтобы ошибка не вылетала и всё. |
|
![](templates/subSilver/images/spacer.gif) |
e.kha Участник со стажем
Вступление в Клуб: 26.04.2012
|
Чт Дек 20, 2012 01:14   |
|
Полезность: Нет оценки
|
что значит передавайте в нужном формате? пример можно показать? |
|
![](templates/subSilver/images/spacer.gif) |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Дек 20, 2012 10:07   |
|
Полезность: Нет оценки
|
Напиши
Код: | to_number(trim(trs_doc.AMOUNT), '9999999999990D00'); |
Используй разделитель установленный в системе _________________ всегда есть как минимум 2 выхода |
|
![](templates/subSilver/images/spacer.gif) |
e.kha Участник со стажем
Вступление в Клуб: 26.04.2012
|
Чт Дек 20, 2012 10:15   |
|
Полезность: Нет оценки
|
проблема в обратной конвертации.... видимо в бизнесс процессе происходит обратная конвертация из суммы в строку, и разделитель вставляется с запятой, когда требуется с точкой.... |
|
![](templates/subSilver/images/spacer.gif) |
e.kha Участник со стажем
Вступление в Клуб: 26.04.2012
|
Вт Дек 25, 2012 02:12   |
|
Полезность: Нет оценки
|
проблема решается очень просто.
в хранимой процедуре в самом начале надо вставить
Код: | EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=''.,'''; |
|
|
![](templates/subSilver/images/spacer.gif) |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Ср Дек 26, 2012 07:31   |
|
Полезность: Нет оценки
|
e.kha пишет: | проблема решается очень просто.
в хранимой процедуре в самом начале надо вставить
Код: | EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=''.,'''; |
|
Только вчера узнал.
Не надо в хранимой процедуре.
Открываете АРМ Администратор доступа.
Дальше Меню->Системные справочники->Профили, выбираем DEFAULT
Находим параметр ALTER_SESSION, через пробел добавляем опцию NLS_NUMERIC_CHARACTERS='.,' |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|