存储过程读取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 := 'c:\temp';
22 SERVFILE := 'a.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;执行到26行,出错,错误是
ORA-31001:路径名”C:\temp\new.xml"无效
ORA-06512: "SYS.XDBURITYPE", 行11
ORA-06512: "XDB.DBMS_XSLPROCESSOR", 行142
ORA-29280: 无效的目录路径我用的是oracle 11,客户端,服务器端字符集都是JAPANESE_JAPAN.JA16SJISTILDE,os 日语winxp,还需要做什么设置吗?为啥有这个错误啊?请高手指教。
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 := 'c:\temp';
22 SERVFILE := 'a.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;执行到26行,出错,错误是
ORA-31001:路径名”C:\temp\new.xml"无效
ORA-06512: "SYS.XDBURITYPE", 行11
ORA-06512: "XDB.DBMS_XSLPROCESSOR", 行142
ORA-29280: 无效的目录路径我用的是oracle 11,客户端,服务器端字符集都是JAPANESE_JAPAN.JA16SJISTILDE,os 日语winxp,还需要做什么设置吗?为啥有这个错误啊?请高手指教。
解决方案 »
- 数据字典中的视图在pl/sql developer 中能不能看?
- 将多列字段合并为一列的问题
- oracle触发器:我想在插入一条数据的时候,对其中的一个字段进行默认赋值
- 新手上路
- 如何使用dbms_random取随机数值要求3位数字字符串 范围001-999之间 不重复
- Oracle Function Create 两次问题
- 大哥大姐用ultraedit 编辑pro c的 .pc 文檔,高亮显示错误问题; drabit(square) 一定要来阿
- 如何移植库结构
- 极急!oracle8已经安装,无法用PHP访问?
- 请问ORACLE中有无这样的方法。。。GOTO
- forall中的性能问题
- procedure里面 commit时候的问题
改为:
XMLPARSER.PARSE(V_XP, DIR ¦ ¦ '\\' ¦ ¦ SERVFILE);
报无效路径,后来这个是怎么改好的啊
大哥我也碰到这个问题??
注意用大写
我使用PL/SQL的test 存储过程的。
按照楼上的改写为大写的路径格式之后,编译停滞,像是死锁似的....test命令窗口,不能关闭,提示脚本正在运行,可是运行了好久也没有反应,也不能break该test脚本。强制关闭pl/sql也关闭不了,必须在sessin里面kill才可以。
我都要晕了。咋回事啊?下方提示excuting,但是不能运行这么长时间吧?
用这SQL找一下,看看选出的路径包含不包含你的用的。
我知道一般的过程读取文件的路径必须是这个SQL取出来的路径,
没写过XML方面的,不知道是不是也受相同的限制。
主要是,我看到有人使用oralce9i,就可以执行以上代码,但是使用oracle10以上版本就不可执行。但是 oracle 的文档中并无有什么区别.....