存储过程读取xml文件实例:
1
PROCEDURE 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
宋针还 阅读(881)
评论(0) 编辑 收藏 所属分类:
存储过程