Скрипт по выборке данных из Oracle и доставке в Mysql
Цена договорная
Реализация возможна на языках 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 будут предоставлены соискателю
Скрипт должен быть запакован в 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 будут предоставлены соискателю
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.