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

如何使用sqlldr命令将XML数据导入Oracle数据库表,xml,oracle,oracle12c,sql-loader,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=

我试图将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>
但是我得到了错误

记录1:已拒绝-表FV_XML_12第FV列上的错误。野外 数据文件超过最大长度 记录2:已拒绝-表上有错误 FV_XML_12,第FV列。数据文件中的字段超过最大长度


怎么了?

您没有为
fv
字段指定数据类型,因此它默认为
CHAR
;以及:

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

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

...
fields terminated by " "
( id, fv char(4000) )
在11gR2中测试;如果没有大小,我会得到相同的错误,使用指定的大小,两行加载成功。(虽然我创建的表没有
存储为
,因为我没有您的
.xsd
),但它在12c中的工作原理应该完全相同

另请参阅,了解其他方法,例如将每个XML放入单独的文件中

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