SAPфорум.RU
https://sapboard.ru/forum/

JDBC адаптер
https://sapboard.ru/forum/viewtopic.php?f=70&t=91900
Страница 1 из 1

Автор:  Xanderfurst [ Пн, ноя 30 2015, 17:12 ]
Заголовок сообщения:  JDBC адаптер

Коллеги, приветствую!

Задача такая - считать данные из внешней таблицы БД (Oracle) и передать в SAP.
В исходящем канале используется JDBC адаптер.
SELECT'ом выбираю значения полей из внешней таблицы (поле "Query SQL Statement").
Для поля "Update SQL Statement" указываю просто <test>.
Данные считываются и передаются. Но пока в "Update SQL Statement" значение <test> данные считываются постоянно с какой-то периодичностью, притом одни и те же данные накладываются друг на друга.

Подскажите как написать простой UPDATE, чтобы те данные, которые уже были считаны из внешней таблицы больше не считывались и соответственно не передавались в SAP ?

Автор:  Chaser009 [ Вт, дек 01 2015, 03:07 ]
Заголовок сообщения:  Re: JDBC адаптер  Тема решена

Здравствуйте!

Точно не скажу, сам с jdbc не работаю, но, насколько помню, у sender-адаптера там нужно флаг изменения выставить после запроса.

Собственно, вот:

http://help.sap.com/saphelp_nw73/helpda ... ameset.htm

P.S. Как-то общался с коллегой, они у себя активно используют jdbc, так вот там отказались от использования jdbc sender как раз по причине периодических затыков с обновлением признака на больших объемах. Вместо этого используют вызов хранимой процедуры в jdbc receiver, а уже процедура сама выполняет выборку и обновление флага.

Автор:  Xanderfurst [ Вт, дек 01 2015, 11:27 ]
Заголовок сообщения:  Re: JDBC адаптер

Chaser009 написал:
Здравствуйте!

Точно не скажу, сам с jdbc не работаю, но, насколько помню, у sender-адаптера там нужно флаг изменения выставить после запроса.

Собственно, вот:

http://help.sap.com/saphelp_nw73/helpda ... ameset.htm

P.S. Как-то общался с коллегой, они у себя активно используют jdbc, так вот там отказались от использования jdbc sender как раз по причине периодических затыков с обновлением признака на больших объемах. Вместо этого используют вызов хранимой процедуры в jdbc receiver, а уже процедура сама выполняет выборку и обновление флага.


Можете подробнее рассказать про флаг изменения после запроса? Я вообще с JDBC адаптером работаю впервые. А так же интересно как используют вызов хранимой процедуры в jdbc receiver. Буду признателен.

Автор:  Chaser009 [ Вт, дек 01 2015, 12:56 ]
Заголовок сообщения:  Re: JDBC адаптер

Я ж вам ссылку на хелп дал, там вроде все написано :-)

В таблице должно быть некое поле-индикатор того, что строка уже считывалась адаптером.

После селекта с вашими условиями фильтра + значение индикатора - 0, допустим , выполняется апдейт, в котором должно быть то же условие, что в предыдущем селекте. Этот апдейт как раз устанавливает признак считывания в 1 для выбранных до этого записей, чтобы следующий селект их уже не учитывал.

А значение test, которое вы указывали - просто для целей тестирования, без установки индикатора.

По хранимым процедурам: у jdbc receiver куча вариантов синтаксиса. Можно запрос выполнить, можно процедуру хранимую запустить и т.д. В хелпе довольно доходчиво все объясняется.

Я как-то делал вариант, когда данные по параметрам в исходящем сообщении дергались из одной базы, потом результат выборки передавался в другую базу в хранимую процедуру, и оттуда возвращался нужный набор данных.

Автор:  chizz [ Вт, дек 01 2015, 17:42 ]
Заголовок сообщения:  Re: JDBC адаптер

В таблице, в которой вы делаете select должно быть поле, указывающее на статус строки (новая, обработана, и т.д). Назовем ее STATUS.
Если Status = 0, то необходимо обрабатывать эти данные.

В Select указываете "Select бла-бла-бла from TABLE where status = 0"
В Update указываете "Update set status = 1 where status = 0"

Вот у этого товарища много про Stored Proc in Receiver Channel http://scn.sap.com/people/rajasekhar.reddy14/content

Автор:  Chaser009 [ Ср, дек 02 2015, 06:20 ]
Заголовок сообщения:  Re: JDBC адаптер

chizz написал:
В Select указываете "Select бла-бла-бла from TABLE where status = 0"
В Update указываете "Update set status = 1 where status = 0"


Небольшое уточнение: чаще всего "where <условие> and status = 0", а в апдейте - "Update set status = 1 where <то же условие, что в select> and status = 0", ибо запросов с разными условиями выборки может быть больше, чем один.

Автор:  Xanderfurst [ Чт, дек 03 2015, 11:47 ]
Заголовок сообщения:  Re: JDBC адаптер

Почему в Update нужен where status = 0 ?
Разве просто set status = 1 не достаточно ?

Автор:  Chaser009 [ Пт, дек 04 2015, 04:05 ]
Заголовок сообщения:  Re: JDBC адаптер

В принципе, достаточно, если у вас фильтр указан. Но "правила хорошего тона" в программировании предполагают, что не надо грузить базу лишними операциями там, где они не нужны. Представьте, что у вас пара миллионов записей, удовлетворяющих фильтру, при этом, со статусом "0" из них - 10 штук. А вы лихим апдейтом все эти пару миллионов обновлять возьметесь еще на раз. Оно надо? Особенно, если у вас это поле еще в индексе присутствовать будет.

Автор:  chizz [ Чт, дек 10 2015, 16:31 ]
Заголовок сообщения:  Re: JDBC адаптер

Также в таблице может быть несколько статусов. Например, если этой таблицей пользуется другой интерфейс или программа. Для нее например записи со статусом 3 означают забирать, а со статусом 4 - что они уже обработаны. А вы своим каналом раз! И всем по единичке. Конфуз.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/