Текущее время: Пн, ноя 20 2017, 22:45

Часовой пояс: 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
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Здравствуйте!

Точно не скажу, сам с 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
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Я ж вам ссылку на хелп дал, там вроде все написано :-)

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

После селекта с вашими условиями фильтра + значение индикатора - 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
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
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
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
В принципе, достаточно, если у вас фильтр указан. Но "правила хорошего тона" в программировании предполагают, что не надо грузить базу лишними операциями там, где они не нужны. Представьте, что у вас пара миллионов записей, удовлетворяющих фильтру, при этом, со статусом "0" из них - 10 штук. А вы лихим апдейтом все эти пару миллионов обновлять возьметесь еще на раз. Оно надо? Особенно, если у вас это поле еще в индексе присутствовать будет.

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


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

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


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

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


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

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


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

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