我在用XMLP做EBS 报表(练习)的时候遇到一个错误,搞了好久都解决不了,不知道错在哪里。下面是我的包和XMLP文件及错误信息。
  具体错误我简单描述一下。我的包在pl/sql developer里面能够正确运行,但是在我创建好数据源和rtf模板,定义好concurrent,然后提交请求的时候就报了下面的错。能确定的是我定义并发的步骤是没有错的,模板也是正确的,但是就是在请求的时候出错。
  很纠结的是我把 第一句里面的package去掉,第2句不要,然后不使用parameter,直接从表里面又能取出数据,一加package后就报错。对了,如果我定义package,但是它不带参数的话又会报“no function with name"**" exists in this  scope”的错。
  不晓得我说这么多,有没有把问题描述清楚,真的很纠结。各位走过路过的朋友要是知道的话还请赐教,谢谢啦!
1,<dataTemplate name="DATA" version="1.0" defaultPackage="HJ_TEST_002"> 
2,<dataTrigger name="beforeReport" source="HJ_TEST_002.dis_info_pro(:P_DEPT)" /> 包头:
create or replace package HJ_TEST_002 is
     procedure dis_info_pro (P_DEPT in number ); 
end HJ_TEST_002;
包体:
create or replace package body HJ_TEST_002 AS
   
   procedure dis_info_pro (P_DEPT in number)  as
     
    cursor  empinfo_query iS  
    select  empno EmployeeNo
          , ename EmployeeName
          ,sal + nvl(comm,0) Salary
          , deptno deptementNO 
    from    h_emp 
    where   deptno=P_DEPT;
    
     v_empinfo empinfo_query%rowtype;
     
     cursor qur_zh_table is
     select count(1) 
     from zero_hour_table;
     v_zht  number;
     
    begin 
      null;
   if NOT empinfo_query%isopen then 
   open     empinfo_query ;
   end if;
   if NOT qur_zh_table%isopen then 
   open     qur_zh_table ;
   end if;
   fetch qur_zh_table into v_zht ;
   if (v_zht=0)then 
   loop 
   fetch    empinfo_query 
   into     v_empinfo;
   
   insert into zero_hour_table  values(
                                         v_empinfo.employeeno
                                        ,v_empinfo.employeename
                                        ,v_empinfo.salary
                                        ,v_empinfo.deptementno);
   -- dbms_output.put_line( v_empinfo.employeeno ||' '||v_empinfo.employeename);
   exit when empinfo_query % notfound;
   end loop;
   end if ;
   if(v_zht != 0 ) then 
   delete from zero_hour_table;
   loop 
   fetch    empinfo_query 
   into     v_empinfo;
   
   insert into zero_hour_table  values(
                                         v_empinfo.employeeno
                                        ,v_empinfo.employeename
                                        ,v_empinfo.salary
                                        ,v_empinfo.deptementno);
   exit when empinfo_query % notfound;
   end loop;
   end if ;
   
   close qur_zh_table;
   close empinfo_query;
 exception 
   when others then
    dbms_output.put_line('have a error');
    -- COMMIT; 
   end dis_info_pro;   end HJ_TEST_002;xmlp:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <dataTemplate name="DATA" version="1.0" defaultPackage="HJ_TEST_002">
- <parameters>
  <parameter name="P_DEPT" dataType="number" /> 
  </parameters>
- <dataQuery>
- <sqlStatement name="Q_DEPT">
- <![CDATA[  
        SELECT DISTINCT(DEPTNO) FROM   zero_hour_table
  
  ]]> 
  </sqlStatement>
- <sqlStatement name="Q_INFO">
- <![CDATA[  
        select DISTINCT(EMPNO),ENAME,SAL
               from zero_hour_table
  
  ]]> 
  </sqlStatement>
  </dataQuery>
  <dataTrigger name="beforeReport" source="HJ_TEST_002.dis_info_pro(:P_DEPT)" /> 
- <dataStructure>
- <group name="G_DEPT" source="Q_DEPT">
  <element name="DEPTNO" value="DEPTNO" /> 
- <group name="G_EMPNO" source="Q_INFO">
  <element name="EMPNO" value="EMPNO" /> 
  <element name="ENAME" value="ENAME" /> 
  <element name="SAL" value="SAL" /> 
  </group>
  </group>
  </dataStructure>
  </dataTemplate>
Error:
 XDO Data Engine Version No: 5.6.3
Resp: 20419
Org ID : 163
Request ID: 676855
All Parameters: P_DEPT=30
Data Template Code: EMPINFO_TEST_1000
Data Template Application Short Name: FND
Debug Flag: N
{P_DEPT=30}
Calling XDO Data Engine...
[032411_063029299][][EXCEPTION] SQLException encounter while executing data trigger....
java.sql.SQLException: ORA-06550: line 2, column 13:
PLS-00302: component 'P_DEPT' must be declared
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored

解决方案 »

  1.   

    唉!都没人回,还好通过我的摸索找出问题所在了,在这里和大家分享一下吧,也许会有用得着的。
    有两个问题:第一,需要在XML文件<parameters>部分定义的参数,在定义包规范时一定要以全局变量形式定义出来,不然就会出现参数未定义的错误。
      第二:在<data Trigger/>部分调用的必须是函数(不确定,至少procedure是不行)
      好了,就这样,要是有谁遇到这样的问题了可以参考借鉴一下!