动态识别外部表中的列
我们有一个流程,我们通过 SQL 加载程序从多个立法(例如美国、菲律宾、拉丁美洲)上传员工数据。这种情况每周至少发生一次,当前的流程是他们每次加载员工信息时都会创建一个控制文件,使用 SQL*Loader 将其加载到临时表中。
我希望通过创建一个外部表并运行一个并发请求来将数据放入我们的暂存表中来简化这个过程。我遇到了两个绊脚石:
有一些列未被某些立法使用。
示例:美国使用“Veteran_Information”列,而菲律宾和拉丁美洲不使用。菲律宾使用“SSS_Number”,而美国和拉丁美洲不使用。拉丁美洲使用“Medical_Insurance”栏,而美国和菲律宾则不使用。如下所示:
US: LEGISLATION, EMPLOYEE_NUMBER, DATE_OF_BIRTH, VETERAN_INFORMATION
PHL: LEGISLATION, EMPLOYEE_NUMBER, DATE_OF_BIRTH, SSS_NUMBER
LAT: LEGISLATION, EMPLOYEE_NUMBER, DATE_OF_BIRTH, MEDICAL_INSURANCE
业务用户不使用标准 CSV 模板/格式。
由于文件是由非 IT 业务用户发送的,因此他们通常不遵循规定的格式。(可能是培训/用户问题)。他们经常不遵循正确的列顺序 他们经常不遵循正确的列数 他们经常不遵循正确的列名称 如下所示:
US: LEGISLATION, EMPLOYEE_ID, VETERAN_INFORMATION, DATE_OF_BIRTH, EMAIL_ADD
PHL: EMP_NUM, LEGISLATION, DOB, SSS_NUMBER, EMAIL_ADDRESS
LAT: LEGISLATION, PS_ID, BIRTH_DATE, EMAIL, MEDICAL_INSURANCE
外部表是否有办法识别列的正确顺序和命名,即使它们在文件中的顺序/命名约定不正确?
从问题 2 中获取列数据:
US: LEGISLATION | EMPLOYEE_ID | VETERAN_INFORMATION | DATE_OF_BIRTH | EMAIL_ADD
US | 111 | No | 1967 | vet@gmail.com
PHL: EMP_NUM | LEGISLATION | DOB | SSS_NUMBER | EMAIL_ADDRESS
222 | PHL | 1898 | 456789 | pinoy@gmail.com
LAT: LEGISLATION | PS_ID | BIRTH_DATE | EMAIL | MEDICAL_INSURANCE
HON | 333 | 1956 | hon@gmail.com | Yes
当它出现在外部表中时,我希望它是这样的:
LEGISLATION | EMPLOYEE_NUMBER | DATE_OF_BIRTH | VETERAN_INFORMATION | SSS_NUMBER | MEDICAL_INSURANCE | EMAIL_ADDRESS
US | 111 | 1967 | Y | (NULL) | (NULL) | vet@gmail.com
PHL | 222 | 1898 | (NULL) | 456789 | (NULL) | pinoy@gmail.com
HON | 333 | 1956 | (NULL) | (NULL) | Yes | hon@gmail.com
有没有办法让外部表做类似上面的事情?
提前致谢!