存储过程读取xml文件实例:
1PROCEDURE EXECUTE_DATESERV IS
2 BEGIN
3 DECLARE
4 DIR VARCHAR2(50);
5 SERVFILE VARCHAR2(20);
6 V_XP XMLPARSER.PARSER;
7 V_DOC XMLDOM.DOMDOCUMENT;
8 V_MAPPINGS XMLDOM.DOMNODELIST;
9 V_MAPLEN NUMBER(3);
10 V_TABLE XMLDOM.DOMNODELIST;
11 V_TABLELEN NUMBER(3);
12 V_FIELD XMLDOM.DOMNODELIST;
13 V_MAPITEM XMLDOM.DOMNODE;
14 V_TABLEITEM XMLDOM.DOMNODE; NNM XMLDOM.DOMNAMEDNODEMAP;
15 V_BO VARCHAR2(20);
16 V_VALID VARCHAR2(20);
17 V_FIELDID VARCHAR2(20);
18 V_BOOLEAN NUMBER(2);
19 V_TEXT VARCHAR2(200);
20 BEGIN
21 DIR := '/oracle/szh';
22 SERVFILE := 'dateserv.xml';
23 V_XP := XMLPARSER.NEWPARSER;
24 XMLPARSER.SETVALIDATIONMODE(V_XP, FALSE);
25 XMLPARSER.SETBASEDIR(V_XP, DIR);
26 XMLPARSER.PARSE(V_XP, DIR || '/' || SERVFILE);
27 V_DOC := XMLPARSER.GETDOCUMENT(V_XP);
28 XMLPARSER.FREEPARSER(V_XP);
29 V_MAPPINGS := XMLDOM.GETELEMENTSBYTAGNAME(V_DOC, 'mappings');
30 V_MAPLEN := XMLDOM.GETLENGTH(V_MAPPINGS);
31 FOR V_I IN 0 .. V_MAPLEN - 1 LOOP
32 V_MAPITEM := XMLDOM.ITEM(V_MAPPINGS, V_I);
33 V_TABLE := XMLDOM.GETCHILDNODES(V_MAPITEM);
34 V_TABLELEN := XMLDOM.GETLENGTH(V_TABLE);
35 FOR V_J IN 0 .. V_TABLELEN - 1 LOOP
36 V_TABLEITEM := XMLDOM.ITEM(V_TABLE, V_J);
37 IF XMLDOM.GETNODENAME(V_TABLEITEM) = 'table' THEN
38 NNM := XMLDOM.GETATTRIBUTES(V_TABLEITEM);
39 V_BO := XMLDOM.GETNODEVALUE(XMLDOM.ITEM(NNM, 0));
40 END IF;
41 V_FIELD := XMLDOM.GETCHILDNODES(V_TABLEITEM);
42 V_FIELDID := XMLDOM.GETNODEVALUE(XMLDOM.GETFIRSTCHILD(XMLDOM.ITEM(V_FIELD,
43 0)));
44 V_VALID := XMLDOM.GETNODEVALUE(XMLDOM.GETFIRSTCHILD(XMLDOM.ITEM(V_FIELD,
45 1)));
46 PRO_SZH_SEQ.UPDATE_ENDDATE(V_BO,
47 V_FIELDID,
48 V_VALID,
49 V_BOOLEAN,
50 V_TEXT);
51 IF V_BOOLEAN <> 1 THEN
52 EXECUTE_INSERT_ERROR('pk_szh_date.excute_dateserv error :' ||
53 V_TEXT);
54 END IF;
55 END LOOP;
56 END LOOP;
57 XMLDOM.FREEDOCUMENT(V_DOC);
58 END;
59 NULL;
60 END EXECUTE_DATESERV;
过程相应的XML文件:
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<mappings>
3 <table name="enrollcon" >
4 <field>enddate</field>
5 <valid>valid</valid>
6 </table>
7 <table name="precautcon" >
8 <field>enddate</field>
9 <valid>valid</valid>
10 </table>
11 <table name="jrbill" >
12 <field>endtime</field>
13 <valid>validflag</valid>
14 </table>
15 <table name="jr97" >
16 <field>endtime</field>
17 <valid>validflag</valid>
18 </table>
19 <table name="mer" >
20 <field>exitdate</field>
21 <valid>valid</valid>
22 </table>
23 <table name="merabate" >
24 <field>enddate</field>
25 <valid>valid</valid>
26 </table>
27 <table name="booking" >
28 <field>obligatedate</field>
29 <valid>valid</valid>
30 </table>
31</mappings>
如果报错ORA-20100:Error occurred while parsing: No such file or directory,在服务器端首先把文件的读取权限授予运行存储过程的用户,如:
GRANT READ[,WRITE] ON DIRECTORY directory TO username;
实例:grant read, write on directory exp_dir to user;
。
---------------------------------------------------------------------------------------------------------------------------------
说人之短,乃护己之短。夸己之长,乃忌人之长。皆由存心不厚,识量太狭耳。能去此弊,可以进德,可以远怨。
http://www.blogjava.net/szhswl
------------------------------------------------------------------------------------------------------ ----------------- ---------
posted on 2007-12-05 11:13
宋针还 阅读(840)
评论(0) 编辑 收藏 所属分类:
存储过程