我已将一些 XML 文件加载到 Oracle 数据库(Linux x64 上的 11gr2)中,我必须使用 fn:string-join 成功导入包含多条记录的 xml 文件。
在使用 SQL*LOADER 将数据登陆/导入到 XMLTYPE 表后,我发出了一个查询,将 XML 数据从 XMLTYPE 表传输到常规表,我们称之为 Table_A
该表现在在目标字段中包含导入记录的所有字段(本例中为 2 条记录),例如。
xml 文件包含 computer_brand 的条目,第一条记录的值为“Dell”,第二条记录的值为“Apple”。现在 XML 文件中的两条记录已被选择/插入到 Table_A 但位于同一字段中,用分号分隔。字段名称:computer_brand 值:Dell;Apple
我想做的是从表中选择单独的值(不管字段中不同值的数量,因为此查询需要从计划的作业中运行)并将它们传递给它们自己的所有值单独的字段。
这是我制作/使用的东西的一个例子:
Table_A 元数据:
CREATE TABLE table_a
(
computer_brand varchar2(41),
owner varchar2(101),
address varchar2(101),
serialnumber varchar2(21)
)
我使用以下查询选择并插入从 xmltype 表导入的数据到 Table_A 中:
insert into table_a
(computer_brand,
owner,
address,
serialnumber
)
select
a.computer_brand,
a.owner,
a.address,
a.serialnumber
from table_xml a,
xmltable (xmlnamespaces('not mentioned due to security reasons' as "tns"),
'//tns:Main' passing a.xml_file
columns
computer_brand varchar2(41) path 'fn:string-join(tns:/@computer_brand,";")',
owner varchar2(101) path 'fn:string-join(tns:/@owner,";")',
address varchar2(101) path 'fn:string-join(tns:/@address,";")',
serialnumber varchar2(21) path 'fn:string-join(tns:/serialnumber,";")')
(+) k
where upper(file_name)=upper('xmlfile.xml');
上述查询的输出是:
computer_brand
--------------
dell;apple
owner
--------------
pete;jack
address
--------------
basement;attic
serialnumber
--------------
123444;456555
如果有人知道如何提供帮助,请提前非常感谢?我在看SUBSTR()
并没有真正设法解决它..