Скрипт по выборке данных из Oracle и доставке в Mysql

Цена договорная
19 сентября 2022, 17:20 • 6 откликов • 58 просмотров
Реализация возможна на языках php или python.
Скрипт должен быть запакован в docker контейнер, который можно билдить.

У нас имеется 2 субд. Oracle (является источником данных) и Mysql (Является местом доставки данных)

Необходимо переносить ключи из DB oracle в Mysql с переодичностью либо на постоянной основе (когда происходит изменение в oracle).

В программе должен быть конфигурационный файл.
В этом файле должны редактироваться доступы к Oracle (Источник данных) и Mysql (Место доставки данных)
А так же переменная $tabid (по умолчанию 99999999), в которую можно внести целое число (int), которая будет использоваться в скрипте.

1. Получение данных из Oracle для загрузки в Mysql
SELECT r.CARD_ID,
rk.KEY_CODE
FROM REG_KEY rk
LEFT JOIN REG r ON rk.REG_ID = r.REG_ID

2. Очистка Mysql от старых ключей (делается 1 раз перед началом вставки всех новых ключей)
delete from personal where description = 'API_GUEST'

3. Вставка ключа

Каждая строка из 1 пункта, является инсертом в MYSQL.
Значение KEY_CODE необходимо преобразовать к нужному виду перед INSERT в MYSQL

Преобразования на уровне SQL можно выполнить следующим запросом:
select concat('380', convert(conv(substr(1000130501058077,1,17),10,16) using utf8)) as KEY_CODE (где число 1000130501058077 выгружается из поля)

Данный результат запроса (38038D9D073E9E1D) необходимо использовать в INSERT с приставкой x'38038D9D073E9E1D' (чтобы вставился varbinary(8))

#Вставка новой карты в MYSQL

insert into personal(
PARENT_ID,
TYPE,
EMP_TYPE,
NAME,
DESCRIPTION,
STATUS,
CODEKEY,
CODEKEYTIME,
CODEKEY_DISP_FORMAT,
CREATEDTIME,
BADGE,
USER_APPLS_EDIT_CURRENT
)
values(
(select p.id from personal p where p.TABID = '$tabid'),
"EMP",
"GUEST",
"$CARD_ID",
"API_GUEST",
"AVAILABLE",
x'$KEY_CODE',
now(),
"W58DEC",
now(),
"2",
"1"
)



Дополнительный вариант решения задачи:

На сервере может быть поднят oracle express, в котором будет развернута копия схема таблицы MYSQL, в которую будет наполняться нужные строчки.
Единственное без конвертации в varbinary.
Можно подготовить dblink, который будет настроен на mysql сервер.
Далее создать триггера на INSERT, DELETE у таблицы из Oracle express, которые будут инициализировать соответствующие INSERT/DELETE запросы в mysql через oracle dblink.
Единственное что в триггере INSERT, выбираемые данные по KEY_CODE при инсерте в MYSQL будут обогащены x'key_code' для того, чтобы это поле падало в виде varbinary(8)

Схемы таблиц oracle и mysql будут предоставлены соискателю
Отзывы
Сотрудничеством более чем доволен. Постоянно на связи, все необходимая помощь с его стороны была оказана, в общении человек приятный. Заказчика рекомендую!
~ 2 года назад