ITPub博客

首页 > Linux操作系统 > Linux操作系统 > XML导入到ORACLE中

XML导入到ORACLE中

原创 Linux操作系统 作者:lin_qin_007 时间:2009-04-13 18:28:51 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-13

  • 博文量
    4
  • 访问量
    10374