Текущее время: Чт, июл 19 2018, 02:31

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: JDBC адаптер
СообщениеДобавлено: Пн, ноя 30 2015, 18:12 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Вт, сен 17 2013, 09:38
Сообщения: 5
Коллеги, приветствую!

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

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JDBC адаптер  Тема решена
СообщениеДобавлено: Вт, дек 01 2015, 04:07 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Здравствуйте!

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

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

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

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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Вт, дек 01 2015, 12:27 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Вт, сен 17 2013, 09:38
Сообщения: 5
Chaser009 написал:
Здравствуйте!

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

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

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

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


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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Вт, дек 01 2015, 13:56 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Я ж вам ссылку на хелп дал, там вроде все написано :-)

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

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

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

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

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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Вт, дек 01 2015, 18:42 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, сен 25 2012, 14:14
Сообщения: 94
Пол: Мужской
В таблице, в которой вы делаете 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


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Ср, дек 02 2015, 07:20 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
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", ибо запросов с разными условиями выборки может быть больше, чем один.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Чт, дек 03 2015, 12:47 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Вт, сен 17 2013, 09:38
Сообщения: 5
Почему в Update нужен where status = 0 ?
Разве просто set status = 1 не достаточно ?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Пт, дек 04 2015, 05:05 
Старший специалист
Старший специалист
Аватара пользователя

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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: JDBC адаптер
СообщениеДобавлено: Чт, дек 10 2015, 17:31 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, сен 25 2012, 14:14
Сообщения: 94
Пол: Мужской
Также в таблице может быть несколько статусов. Например, если этой таблицей пользуется другой интерфейс или программа. Для нее например записи со статусом 3 означают забирать, а со статусом 4 - что они уже обработаны. А вы своим каналом раз! И всем по единичке. Конфуз.


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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