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/ |