Oracle是否提供XML格式文件的标准上传? 我认为用于XML输出的规范格式structure = ROWSET/ROW/columname
可以通过使用适当的控制文件内容运行sqlldr而再次上载回表中。
但我在网上任何地方都找不到任何东西,试验后的错误消息似乎表明只能将XML上载到XML格式的表格中,我只想在普通表格中上传数据,但要提供XML格式的数据。Oracle SQL * Loader可以处理XML吗?
0
A
回答
1
不,SQL * Loader只能处理“平面”文件。
一种方法是编写一个XSLT转换,将ROWSET/ROW/column
格式转换为文本文件,然后将其导入到目标表中。
另一种选择是将XML导入到单个行中,然后使用Oracle的XML函数从该临时表中选择关系结果并将其插入到真实表中。
1
没有一个标准化的选项,但有了这种特定的格式,你可以做到这一点。如果你有一个表:
CREATE TABLE test_tab (
id NUMBER,
text VARCHAR2(50)
);
而且在test_tab.xml
文件的记录:
<ROWSET>
<ROW>
<ID>1</ID>
<TEXT>This is some text</TEXT>
</ROW>
<ROW>
<ID>2</ID>
<TEXT>This is some more text</TEXT>
</ROW>
<ROW>
<ID>3</ID>
<TEXT>This is some other text</TEXT>
</ROW>
<ROW>
<ID>4</ID>
<TEXT>This is also some text</TEXT>
</ROW>
</ROWSET>
和控制文件test_tab.ctl
:
LOAD DATA
INFILE 'test_tab.xml'
CONCATENATE 4
INTO TABLE test_tab
(
dummy FILLER CHAR(15) TERMINATED BY "<ROW>",
id CHAR(10) ENCLOSED BY "<ID>" AND "</ID>",
text CHAR(40) ENCLOSED BY "<TEXT>" AND "</TEXT>"
)
你可以这样做:
sqlldr usr/pwd control=test_tab.ctl
Commit point reached - logical record count 4
SELECT * FROM test_tab;
ID TEXT
---------- --------------------------------------------------
1 This is some text
2 This is some more text
3 This is some other text
4 This is also some text
您也可以从同一个文件中创建一个外部表,如果你把一个目录Oracle可以看到:
CREATE TABLE test_tab (
id NUMBER,
text VARCHAR2(50)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY some_dir
ACCESS PARAMETERS
(
RECORDS DELIMITED BY "</ROW>"
FIELDS
(
dummy CHAR(15) TERMINATED BY "<ROW>",
id CHAR(10) ENCLOSED BY "<ID>" AND "</ID>",
text CHAR(40) ENCLOSED BY "<TEXT>" AND "</TEXT>"
)
)
LOCATION ('test_tab.xml')
)
PARALLEL
REJECT LIMIT UNLIMITED;
Table created.
SELECT * FROM test_tab;
ID TEXT
---------- --------------------------------------------------
1 This is some text
2 This is some more text
3 This is some other text
4 This is also some text
相关问题
- 1. 可以在chakracore下处理xml吗?
- 2. Oracle sql loader验证
- 3. Oracle SQL-Loader有效处理值中的内部双引号
- 4. 如何使用Oracle Sql Loader
- 5. 什么是Oracle SQL Loader?
- 6. 我可以在Oracle Loader文件中添加SQL Stages
- 7. oracle sql批处理
- 8. 在SQL Server中可以创建一个可以处理序列的函数吗?
- 9. NSJSONSerialization可以处理null吗?
- 10. Java可以处理Expando吗?
- 11. WCF可以处理GUID吗?
- 12. 可以将变量传递给SQL * Loader控制文件吗?
- 13. 可以通过ssis处理宏(Excel)吗?
- 14. sys.argv可以处理可选参数吗?
- 15. PL/SQL Oracle错误处理
- 16. Can $ self可以传递给XML :: Twig处理程序吗?
- 17. Oracle SQL Loader控制文件分隔符
- 18. 如何调整Oracle的SQL * Loader追加?
- 19. 使用Oracle sql loader加载时出错
- 20. Oracle 11g SQL Loader获取951错误
- 21. Oracle sql loader日期格式问题
- 22. Oracle 12c - SQL * Loader条件加载
- 23. 在SQL Loader中使用Oracle序列?
- 24. SQL * Loader:处理数据中的分隔符字符
- 25. WPF可以处理Guid从LINQ到SQL吗?
- 26. SQL Server 2008可以每秒处理300个事务吗?
- 27. 经典ASP可以处理SQL Server镜像故障转移吗?
- 28. PHP可以处理所有类型的SQL吗?
- 29. SQL Try-Catch块可以处理抛出的CLR错误吗?
- 30. 我可以直接在SQL查询中处理返回值吗
OK - 所以它的背部使用的文件有适当的选择列分隔符即可。可惜并且有点意外 - 并且提示Oracle在11.3中增加这个功能:-)。 – Maestro13
甲骨文有所不同:http://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb25loa.htm和http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/ xdb25loa.htm#ADXDB2900 –
@ SeanB.Durkin:这些示例是关于将XML文件(或片段)的内容加载到单个“XMLType”列中的。这不是关于解析XML结构并将单个标签的内容放入不同的列中。这个XML:' Arthur '不能**被SQLLoader处理成表'person(id,name)' –