如何使用sqlldr命令将XML数据导入Oracle数据库表

时间:2017-12-06 19:00:24

标签: xml oracle oracle12c sql-loader

我正在尝试将XML数据导入Oracle数据库,但是收到了下面描述的错误

创建表:

CREATE TABLE fv_xml_12 (
   id    NUMBER,
   fv  XMLTYPE)
   XMLTYPE fv STORE AS OBJECT RELATIONAL
      XMLSCHEMA "http://www.example.com/fvInteger.xsd" 
      ELEMENT "FeatureVector";

创建了加载器:

options (errors=9999999, rows=5)
load data
 characterset WE8MSWIN1252
infile '/home/alucard/fv_data_cophir/loader_pbf/semiestruturado/12dim/FeatureVectors_XML.txt'
 badfile '/home/alucard/fv_data_cophir/loader_pbf/semiestruturado/12dim/FeatureVectors.bad'
 discardfile '/home/alucard/fv_data_cophir/loader_pbf/semiestruturado/12dim/FeatureVectors.dsc'
 into table fv_xml_12
 fields terminated by " "
( id, fv)

数据:

1 <FeatureVector><feature>11</feature><feature>50</feature><feature>19</feature><feature>27</feature><feature>8</feature><feature>13</feature><feature>17</feature><feature>22</feature><feature>25</feature><feature>9</feature><feature>9</feature><feature>20</feature></FeatureVector>
2 <FeatureVector><feature>13</feature><feature>34</feature><feature>31</feature><feature>7</feature><feature>18</feature><feature>8</feature><feature>20</feature><feature>15</feature><feature>12</feature><feature>10</feature><feature>19</feature><feature>19</feature></FeatureVector>

sqlldr命令:

sqlldr user/pass control=imp_fv_12dim.ctl

但我收到错误......

  

记录1:拒绝 - 表FV_XML_12,列FV出错。领域   数据文件超过最大长度   记录2:拒绝 - 表格错误   FV_XML_12,列FV。数据文件中的字段超出最大长度

有什么问题?

1 个答案:

答案 0 :(得分:1)

您没有为fv字段指定数据类型,因此默认为CHAR;和from the documentation

  

对于未指定长度的分隔CHAR字段,默认值为255个字节。

您的XML值大约为280个字符,因此超出了该限制。您可以通过指定更大的尺寸来避免错误:

...
fields terminated by " "
( id, fv char(4000) )

在11gR2中测试;没有大小我得到相同的错误,指定的大小成功加载两行。 (虽然我创建了没有store as的表格,因为我没有.xsd。但是它应该在12c中完全相同。

另请参阅Load XMLType Data Using SQL*Loader了解其他方法,例如将每个XML放入单独的文件中。