Как вызвать хранимый пакет / процедуру из контрольного файла SQLLDR
У меня есть процесс sqlldr (который запускается из пакета Windows), который загружает около миллиона записей в промежуточную таблицу. После завершения загрузки необходимо запустить пакеты / процедуры SQL для преобразования данных. Могу ли я вызвать пакеты из того же контрольного файла, который я использовал для импорта данных? если так, какой будет синтаксис? Если нет, каков альтернативный метод для достижения этой цели?
1 ответ
Краткий ответ: вызовите нужный вам пакет / процедуру с помощью команды sqlplus в вашем пакетном файле после команды sqlldr, как в следующем примере.
sqlldr DB_User/DB_Password control=path_of_your_ctl_file.ctl log=path_to_save_log_file.log &
exit | sqlplus DB_User/DB_Password "begin package.procedure; end;"
Длинный ответ: Во-первых, целью sqlldr является загрузка значительного объема данных в пакетном режиме. Для этого вы можете использовать команду sqlldr для загрузки, а не преобразования данных. Теперь это не означает, что вы не можете преобразовывать данные, пока sqlldr читает и загружает данные (смотрите следующий пример).
load data
infile 'path_of_source_data_file.csv'
badfile 'path_to_save_bad_file.bad'
discardfile 'path_to_save_discard_file.dsc'
append into table TABLE_NAME_TO_STORAGE_DATA
fields terminated by ';' optionally enclosed by '"' --it depends of data file structure or extension
TRAILING NULLCOLS
(
COL_1 "TRIM(:COL_1)",
COL_2 "COALESCE(:COL_2, 'UNDEFINED')",
ID_COL "SEQ_ID_COL.NEXTVAL"
)
Хотя вы можете нормализовать свои данные с помощью команды sqlldr, вы должны думать об архитектуре вашей системы. Если фаза нормализации проста, как в приведенном выше примере, она будет хорошо собрана в файл ctl, в противном случае вы должны абстрагировать фазу нормализации и вызвать ее с помощью команды sqlplus, когда закончите фазу загрузки данных.
Примечание: Также вы должны подумать о безопасности, потому что вы передаете, в пакетный файл, имя пользователя базы данных и пароль. Я рекомендую вам использовать файлы Powershell и Export-Clixml для шифрования разумных параметров (посмотрите эту ссылку, чтобы добиться этого).