如何解决一次将多个 XML 文件加载/插入到 Oracle 表中
我有一个表 xml_table_date。下面是表中的结构和示例数据。
但是我想一次性插入多个xml文件(这里是9个)到表中。这些文件驻留在一个 DB 目录中
CREATE TABLE xml_table_data (
File_name varchar2(100),Insert_date timestamp
xml_data XMLTYPE
);
INSERT INTO xml_tab VALUES ( 'DataTransfer_HH_TWWholesale_001_004_12142020113003.xml',XMLTYPE (BFILENAME ('TESTING','DataTransfer_HH_TWWholesale_001_004_12142020113003.xml'),NLS_CHARSET_ID ('AL32UTF8')));
解决方法
您可以使用带有前置处理的外部表从目录中读取文件名。
ALTER SESSION SET CONTAINER=pdb1;
CREATE DIRECTORY data_dir AS '/u02/data';
CREATE DIRECTORY script_dir AS '/u02/scripts';
CREATE DIRECTORY log_dir AS '/u02/logs';
GRANT READ,WRITE ON DIRECTORY data_dir TO demo1;
GRANT READ,EXECUTE ON DIRECTORY script_dir TO demo1;
GRANT READ,WRITE ON DIRECTORY log_dir TO demo1;
在脚本目录中创建一个 list_files.sh 文件。确保 oracle 是所有者并且该文件的权限为 755。 预处理脚本文件不继承 $PATH 环境变量。所以你必须在所有命令之前加上 /usr/bin。
/usr/bin/ls -1 /u02/data/test*.xml | /usr/bin/xargs -n1 /usr/bin/basename
您还需要一个外部表的源文件,但这可以是一个空的虚拟文件。
CREATE TABLE data_files
( file_name VARCHAR2(255))
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_dir
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE CHARACTERSET AL32UTF8
PREPROCESSOR script_dir: 'list_files.sh'
BADFILE log_dir:'list_files_%a_%p.bad'
LOGFILE log_dir:'list_files_%a_%p.log'
FIELDS TERMINATED BY WHITESPACE
)
LOCATION ('dummy.txt')
)
REJECT LIMIT UNLIMITED;
现在您可以将 xml 数据插入到您的表中。
INSERT INTO xml_table_data
( file_name,insert_date,xml_data
)
SELECT file_name,SYSTIMESTAMP,XMLTYPE (BFILENAME ('DATA_DIR',file_name),NLS_CHARSET_ID ('AL32UTF8'))
FROM data_files;
您仍然需要根据您的环境调整示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。