当前位置: 代码迷 >> PB >> pb中调用oracle中存储过程执行结果在数据窗口中显示解决办法
  详细解决方案

pb中调用oracle中存储过程执行结果在数据窗口中显示解决办法

热度:69   发布时间:2016-04-29 08:50:52.0
pb中调用oracle中存储过程执行结果在数据窗口中显示
在pb界面通过条件执行存储过程,存储过程执行后的结果放到一个数据库临时表中,建立临时表的数据窗口来显示执行结果。

在pb界面中输入p_bworkdate,p_eworkdate,p_countLimit ,p_amtLimt 四个条件查询执行存储过程
pb中代码如下 :

t_stat_stdate='20100601'
t_stat_endate'20100601'
t_term_count=5
t_term_amt=100.00


declare lp_reprot_proc PROCEDURE FOR Person_Term_Stat_Date_dy(t_stat_stdate,t_stat_endate,t_term_count,t_term_amt);
Execute lp_reprot_proc;

为何执行后数据库Stat_Temp_Person没有更新呢?直接在oracle中执行就可以。是不是要建立存储过程数据窗口的,如果建立,输出要怎样呢?



oracle存储过程如下:
CREATE OR REPLACE PROCEDURE Person_Term_Stat_Date_dy(
p_bworkdate IN VARCHAR2, -- 开始日期
p_eworkdate IN VARCHAR2, -- 结束日期
p_countLimit IN NUMBER, --最小笔数.
p_amtLimt IN NUMBER, --最小金额.
p_errorcode OUT NUMBER, -- 错误代码
p_szerror OUT VARCHAR2) -- 错误信息
IS
ll_count NUMBER DEFAULT 0;
l_sum NUMBER DEFAULT 0; --统计金额.
l_count NUMBER DEFAULT 0; --统计笔数.
  --l_operation VARCHAR2 DEFAULT 'ALL';

--l_file UTL_FILE.FILE_TYPE;
CURSOR c1(szPerson VARCHAR2) IS SELECT distinct Term_id,nvl(person_name,'') person_name from Term where Term_Status = '正常' and Person_Name = szPerson order by Term_id ;
CURSOR c2 IS SELECT DISTINCT nvl(PERSON_NAME,'') PERSON_NAME FROM PERSON_TEMP ;
BEGIN

p_errorcode := 0;
p_szerror := 'OK';
  --l_operation := p_operation ;
  FOR c12 in c2 LOOP

  --DBMS_OUTPUT.put_line('姓名'||'-'||C12.person_name);
delete from Stat_Temp_Person where Person_Name = c12.PERSON_NAME;
commit;
FOR c11 IN c1(c12.PERSON_NAME) LOOP
BEGIN
select nvl(sum(Term_Count),0),nvl(sum(Term_amt),0.00) INTO l_count,l_sum
From Term_Stat_Date Where Stat_Date >=p_bworkdate and Stat_Date <=p_eworkdate and Term_id = c11.Term_id ;
IF l_count > p_countLimit OR l_sum > p_amtLimt THEN
Insert Into Stat_Temp_Person(Term_id,Term_Count,Term_amt,Person_Name) Values(c11.Term_id,l_count,l_sum,c12.PERSON_NAME) ;
  --COMMIT;
END IF;
END ;
END LOOP;
  END LOOP;
commit;
p_szerror :='finish';
--关闭文件
--p_szerror := 'utl_file.fclose';
--UTL_FILE.FCLOSE(l_file);
EXCEPTION
WHEN OTHERS THEN
p_errorcode := 1901;
--p_szerror := 'finish 处理完成';
END Person_Term_Stat_Date_dy;


------解决方案--------------------
PB 调存储过程生成DW 对象的方法是在建立DW对象向导中选择数据源的时候选择:Stored Procedure 
再在存储过程列表中选择相应的存储过程即可。
------解决方案--------------------
参数是 默认的,你只需在 dw.retrive()按照SP参数列表顺序填写参数即可。
代码迷推荐解决方案:oracle存储过程,http://www.daimami.com/oracle-develop/177537.html
  相关解决方案