XML数据文件怎么导入到Oracle数据库中,xml文件的一个元数据如下:
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
- <tablename>
- <tablename_row>
<WISField003>广东省东莞市市直辖乡沙井子一场袁屋边沙井头坊三巷1号</WISField003>
<WISField005>广东省广州市白云区太和镇穗丰村</WISField005>
<WISField041>穗丰新排路一巷75号</WISField041> </tablename_row>
<tablename_row>
……
</blename_row>
</tablename>
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
- <tablename>
- <tablename_row>
<WISField003>广东省东莞市市直辖乡沙井子一场袁屋边沙井头坊三巷1号</WISField003>
<WISField005>广东省广州市白云区太和镇穗丰村</WISField005>
<WISField041>穗丰新排路一巷75号</WISField041> </tablename_row>
<tablename_row>
……
</blename_row>
</tablename>
解决方案 »
- 简述通过analyze收集的统计信息对查询性能有何种影响
- 大家帮忙看看这个存储过程改的对不对
- 新手请教:执行计划怎么看???
- pl/sql 中调用ora存储过程,若传入/传出参数是自定义包中的数据类型时,编译不通过,报错ORA-00922:缺少或无效选项。何解? 3Q :)
- 大家帮忙看看这段存储过程有什么错误
- 把Oracle10g下的数据库,导入9i出现错误。
- 在线等,一个在select语句中包括子查询的sql语句
- 怎樣在ORACLE8.16 EXPORT數據庫?
- 急急急!!!在线等候???
- 如何建多个用户
- 新建用户,赋只读权限
- plsql developer 连接不了数据库。数据库重启后又可以正常连接
如果你要结构化的那就得相应建表了。。
/步骤二:创建存放数据的表SQL>createtableLQ_XML_TEST
(
USER_ID NUMBER(10),
USER_NAMEVARCHAR2(30)
);步骤三:创建函数SQL>DECLARE QRYCTX DBMS_XMLGEN.CTXHANDLE; dst_loc CLOB; SAVCTXDBMS_XMLSTORE.CTXTYPE; N NUMBER; src_loc bfile := bfilename('XML_DIR', 'T_PRINTCLOBOUT.XML'); amt number := dbms_lob.lobmaxsize; src_offset number := 1; dst_offset number := 1; lang_ctx number := dbms_lob.default_lang_ctx; warning number; v_exists PLS_INTEGER := 0;BEGIN DBMS_LOB.CREATETEMPORARY(dst_loc, true);--该语句必写,原因不明,否则报错。 DBMS_OUTPUT.PUT_LINE('------------ LOB LOADCLOBFORMFILE EXAMPLE ------------'); dbms_lob.fileopen(src_loc, dbms_lob.file_readonly); v_exists := DBMS_LOB.fileexists(src_loc);---- 用于测试文件名以及路径是否正确 IF v_exists = 0 THEN dbms_output.put_line('FILE NOT EXIST'); ELSE dbms_output.put_line('FILE AND DIR VALID'); END IF;----将数据从OS文件加载到CLOB变量------- dbms_lob.LOADCLOBFROMFILE(dst_loc, src_loc, amt, dst_offset, src_offset, dbms_lob.default_csid, lang_ctx, warning); dbms_output.put_line(' Amount specified ' || amt); dbms_output.put_line(' Number of bytes read from source: ' || (src_offset - 1)); dbms_output.put_line(' Number of characters written to destination: ' || (dst_offset - 1)); if (warning = dbms_lob.warn_inconvertible_char) then dbms_output.put_line('Warning: Inconvertible character'); end if; dbms_lob.filecloseall(); DBMS_OUTPUT.PUT_LINE(dst_loc); --开始设置加载数据的列 SAVCTX :=DBMS_XMLSTORE.NEWCONTEXT('LQ_XML_TEST'); DBMS_XMLSTORE.CLEARUPDATECOLUMNLIST(SAVCTX); DBMS_XMLSTORE.SETUPDATECOLUMN(SAVCTX, 'USER_ID');--要跟表的列名一致 DBMS_XMLSTORE.SETUPDATECOLUMN(SAVCTX, 'USER_NAME'); N :=DBMS_XMLSTORE.INSERTXML(SAVCTX, dst_loc); DBMS_XMLSTORE.CLOSECONTEXT(SAVCTX);END;/ 注意:xml文件的节点标签名要与表的字段名一致,否则解析不出来,插入表是空值
我的XML内容如下
<?xml version="1.0"?>
<LQ_XML_TEST>
<USER_ID>1</USER_ID>
<USER_NAME>asdf</USER_NAME>
</LQ_XML_TEST>
但是导入的时候总提示解析失败,不知道是怎么回事
SQL> exec sp1;
------------ LOB LOADCLOBFORMFILE EXAMPLE ------------
test exist
FILE AND DIR VALID
Amount specified 18446744073709551615
Number of bytes read from source: 111
Number of characters written to destination: 111
<?xml version="1.0"?>
<LQ_XML_TEST>
<USER_ID>1</USER_ID>
<USER_NAME>asdf</USER_NAME>
</LQ_XML_TEST>
BEGIN sp1; END;*
ERROR at line 1:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00222: error received from SAX callback function
ORA-06512: at "SYS.DBMS_XMLSTORE", line 78
ORA-06512: at "TEST.SP1", line 74
ORA-06512: at line 1