XML导入到ORACLE中

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 XML 导入到ORACLE

                                           

以下适用于10G版本

--如果是10G以前,用DBMS_XMLSAVE包代替XMLSTORE

步骤一:创建XML文件存放的目录对象,并把xml文件放入此目录

此例中为T_PRINTCLOBOUT.XML

SQL>create directory XML_DIR as '/opt'
/

步骤二:创建存放数据的表

SQL>create table LQ_XML_TEST
(
  USER_ID   NUMBER(
10),
  USER_NAME VARCHAR2(
30)
);

步骤三:创建函数

SQL>DECLARE

  QRYCTX DBMS_XMLGEN.CTXHANDLE;

  dst_loc CLOB;

  SAVCTX DBMS_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文件的节点标签名要与表的字段名一致,否则解析不出来,插入表是空值

 

 

--还有updatedelete的操作,待续……

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13234423/viewspace-588859/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13234423/viewspace-588859/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值