------------------
------------------
问题:我写了一存储过程来生成xml,在开发机器运行完全正常,但挪到测试机器上却无法创建,报编译错。查了很久也没有查出来,有达人能帮忙看一下吗?
------------------
------------------
存储过程:CREATE OR REPLACE PROCEDURE "INITIAL_LAC" 
AS
    cursor c_table_info is
           select LAC, isActive,Validity_EndTime from lactemp;
    v_lac varchar2(200);
    v_isactive varchar2(200);
    v_validity_endtime varchar2(200);    doc  XMLDOM.DOMDOCUMENT;
    doc_node  XMLDOM.DOMNODE;
    root_node  XMLDOM.DOMNODE;
    service_node XMLDOM.DOMNODE;
  serviceattributes_node XMLDOM.DOMNODE;
    item_node XMLDOM.DOMNODE;    root_elmt XMLDOM.DOMELEMENT;
    service_elmt XMLDOM.DOMELEMENT;
    serviceattributes_elmt XMLDOM.DOMELEMENT;
    item_elmt XMLDOM.DOMELEMENT;
    item_text XMLDOM.DOMTEXT;begin
   doc := XMLDOM.NEWDOMDOCUMENT;
   doc_node := XMLDOM.MAKENODE(doc);
   xmldom.setVersion(doc, '1.0');
    xmldom.setCharset(doc, 'UTF-8');   --root node
   root_elmt := XMLDOM.CREATEELEMENT(doc,'Services');
   XMLDOM.SETATTRIBUTE(root_elmt,'xmlns:xsi ','http://www.w3.org/2001/XMLSchema-instance');
   XMLDOM.SETATTRIBUTE(root_elmt,'xsi:noNamespaceSchemaLocation ','SlaM_Service.xsd');
   root_node:=XMLDOM.APPENDCHILD(doc_node, XMLDOM.MAKENODE(root_elmt));
open c_table_info;
loop
   fetch c_table_info into v_lac, v_isactive,v_validity_endtime;
exit when c_table_info%notfound;   --XML Service tag
    service_elmt := XMLDOM.CREATEELEMENT(doc,'Service');
    XMLDOM.SETATTRIBUTE(service_elmt,'id',v_lac);
    XMLDOM.SETATTRIBUTE(service_elmt,'name',v_lac);
    service_node :=XMLDOM.APPENDCHILD(root_node, XMLDOM.MAKENODE(service_elmt));   --XML description tag
    item_elmt :=XMLDOM.CREATEELEMENT(doc,'description');
    item_node :=XMLDOM.APPENDCHILD(service_node, XMLDOM.MAKENODE(item_elmt));
    item_text := XMLDOM.CREATETEXTNODE(doc,'');
    item_node:=XMLDOM.APPENDCHILD(service_node, XMLDOM.MAKENODE(item_text));   --XML ServiceDefinition tag
    item_elmt :=XMLDOM.CREATEELEMENT(doc,'ServiceDefinition');
    XMLDOM.SETATTRIBUTE(item_elmt,'serviceDefinitionId','LAC');
    item_node :=XMLDOM.APPENDCHILD(service_node, XMLDOM.MAKENODE(item_elmt));   --XML ServiceAttributes tag
    serviceattributes_elmt :=XMLDOM.CREATEELEMENT(doc,'ServiceAttributes');
    serviceattributes_node :=XMLDOM.APPENDCHILD(service_node, XMLDOM.MAKENODE(serviceattributes_elmt));   --XML ServiceAttribute tag: LAC
    item_elmt :=XMLDOM.CREATEELEMENT(doc,'ServiceAttribute');
    XMLDOM.SETATTRIBUTE(item_elmt,'attributeId','LAC');
    XMLDOM.SETATTRIBUTE(item_elmt,'attributeValue',v_lac);
    item_node :=XMLDOM.APPENDCHILD(serviceattributes_node, XMLDOM.MAKENODE(item_elmt));   --XML ServiceAttribute tag: isActive
    item_elmt :=XMLDOM.CREATEELEMENT(doc,'ServiceAttribute');
    XMLDOM.SETATTRIBUTE(item_elmt,'attributeId','isActive');
    XMLDOM.SETATTRIBUTE(item_elmt,'attributeValue',v_isactive);
    item_node :=XMLDOM.APPENDCHILD(serviceattributes_node, XMLDOM.MAKENODE(item_elmt));   --XML ServiceAttribute tag: Validity_EndTime
    item_elmt :=XMLDOM.CREATEELEMENT(doc,'ServiceAttribute');
    XMLDOM.SETATTRIBUTE(item_elmt,'attributeId','Validity_EndTime');
    XMLDOM.SETATTRIBUTE(item_elmt,'attributeValue',v_validity_endtime);
    item_node :=XMLDOM.APPENDCHILD(serviceattributes_node, XMLDOM.MAKENODE(item_elmt));
end loop;
close c_table_info;
    XMLDOM.WRITETOFILE(doc,'UTL_FILE_DIR'||'\initial_lac.xml');
    XMLDOM.FREEDOCUMENT(doc);end;------------------
------------------
在创建存储过程时,遇到下面的编译错误,google一大圈也未果:
Error: PLS-00201: identifier 'XMLDOM.DOMELEMENT' must be declared
------------------
------------------
另外,我的oracle版本是11.2.0.3.0 64bit的:
 select banner from v$version; Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
"CORE 11.2.0.3.0 Production"
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

解决方案 »

  1.   

    服务器上缺少XDB.dbms_xmldom包,或者你的测试机用户没有调用该包的权限,xmldom.*调用的是这个包里的内容,给你测试机上的用户授予dba权限、execute any procedure、execute any program权限测试一下。用测试机上的system用户登录看有没有XDB.dbms_xmldom包,如果有,就是权限问题,如果没有,找下安装程序补装下xml支持。
      

  2.   

    Oracle这些扩展功能的包不是每个数据库都默认安装的。