测试数据,存储在D:\oracle,文件名为T_PRINTCLOBOUT.XML。
SQL> create directory XML_DIR as 'D:\oracle';
目录已创建。
SQL> DECLARE
2 QRYCTX DBMS_XMLGEN.CTXHANDLE;
3 dst_loc CLOB;
4 SAVCTX DBMS_XMLSTORE.CTXTYPE;
5 N NUMBER;
6 src_loc bfile := bfilename('XML_DIR', 'T_PRINTCLOBOUT.XML');
7 amt number := dbms_lob.lobmaxsize;
8 src_offset number := 1;
9 dst_offset number := 1;
10 lang_ctx number := dbms_lob.default_lang_ctx;
11 warning number;
12 v_exists PLS_INTEGER := 0;
13 BEGIN
14 DBMS_LOB.CREATETEMPORARY(dst_loc, true);--该语句必写,原因不明,否则报错。
15 DBMS_OUTPUT.PUT_LINE('------------ LOB LOADCLOBFORMFILE EXAMPLE ------------');
16
17 dbms_lob.fileopen(src_loc, dbms_lob.file_readonly);
18 v_exists := DBMS_LOB.fileexists(src_loc);
19 ---- 用于测试文件名以及路径是否正确
20 IF v_exists = 0 THEN
21 dbms_output.put_line('FILE NOT EXIST');
22 ELSE
23 dbms_output.put_line('FILE AND DIR VALID');
24 END IF;
25 ----将数据从OS文件加载到CLOB变量-------
26 dbms_lob.LOADCLOBFROMFILE(dst_loc,
27 src_loc,
28 amt,
29 dst_offset,
30 src_offset,
31 dbms_lob.default_csid,
32 lang_ctx,
33 warning);
34 dbms_output.put_line(' Amount specified ' || amt);
35 dbms_output.put_line(' Number of bytes read from source: ' ||
36 (src_offset - 1));
37 dbms_output.put_line(' Number of characters written to destination: ' ||
38 (dst_offset - 1));
39 if (warning = dbms_lob.warn_inconvertible_char) then
40 dbms_output.put_line('Warning: Inconvertible character');
41 end if;
42 dbms_lob.filecloseall();
43 DBMS_OUTPUT.PUT_LINE(dst_loc);
44 --开始设置加载数据的列
45 SAVCTX := DBMS_XMLSTORE.NEWCONTEXT('ATEMP_090903');
46 DBMS_XMLSTORE.CLEARUPDATECOLUMNLIST(SAVCTX);
47 DBMS_XMLSTORE.SETUPDATECOLUMN(SAVCTX, 'CUST_ID');
48 DBMS_XMLSTORE.SETUPDATECOLUMN(SAVCTX, 'SEX');
49 DBMS_XMLSTORE.SETUPDATECOLUMN(SAVCTX, 'AGE');
50 DBMS_XMLSTORE.SETUPDATECOLUMN(SAVCTX, 'DEPOSIT');
51 N := DBMS_XMLSTORE.INSERTXML(SAVCTX, dst_loc);
52 DBMS_XMLSTORE.CLOSECONTEXT(SAVCTX);
53 END;
54 /
PL/SQL 过程已成功完成。
SQL> commit;
提交完成。
SQL>
阅读(1864) | 评论(0) | 转发(0) |