oracle function 动态sql 遍历结果集

用来组织动态sql以及从动态sql查询结果集中取数

的function

--传入模型和扫描标号
create or replace function F_GET_HYNSR(V_MXDM varchar2,V_SMBH varchar2) return varchar2 is
  TYPE ref_type IS REF CURSOR;
  V_NSRHS number;
  V_HY_ZD varchar2(20);
  V_HY_DM varchar2(20);
  V_SQL_NSR varchar2(2000);
  V_SQL_HY varchar2(2000);
  V_NSRHSTEMP number;
  V_SMBHS varchar2(2000);
  cur ref_type;
begin
  V_SMBHS:=''''||REPLACE(V_SMBH,',',''',''')||'''';
  V_SQL_HY:='select wd.tj_zd,wd.tj_z  from fxfx_fxfa_wdtj wd,fxfx_sm_fxfa_dz smdz
  where wd.tj_b = ''DIM_HY'' and wd.fa_bh = smdz.fa_bh and smdz.sm_bh in ('||V_SMBHS||') and smdz.mxdm = '''||V_MXDM||'''';
  dbms_output.put_line(V_SQL_HY);
  open cur for V_SQL_HY; 
  V_NSRHS:=0;
  FETCH cur into V_HY_ZD,V_HY_DM; 
  while cur%FOUND LOOP 
  V_SQL_NSR := 'select count(1) from dim_nsr nsr where nsr.'||V_HY_ZD||'='''||V_HY_DM||'''';
  dbms_output.put_line(V_SQL_NSR);
  EXECUTE IMMEDIATE V_SQL_NSR into V_NSRHSTEMP;
  dbms_output.put_line(V_NSRHSTEMP);
  V_NSRHS:=V_NSRHS+V_NSRHSTEMP;
  dbms_output.put_line(V_NSRHS);
  FETCH cur into V_HY_ZD,V_HY_DM; 
  END LOOP;
  CLOSE cur;
  return V_NSRHS;
end F_GET_HYNSR;






--传入方案编号
create or replace function F_GET_HYNSR(V_FABH varchar2) return varchar2 is
  TYPE ref_type IS REF CURSOR;
  V_NSRHS number;
  V_HY_ZD varchar2(20);
  V_HY_DM varchar2(20);
  V_SQL_NSR varchar2(2000);
  V_NSRHSTEMP number;
  V_FABHS varchar2(2000);
  cur ref_type;
begin
  V_FABHS:=''''||REPLACE(V_FABH,',',''',''')||'''';
  --dbms_output.put_line(V_FABHS);
  open cur for 'select wd.tj_zd,wd.tj_z  from fxfx_fxfa_wdtj wd
  where wd.tj_b = ''DIM_HY'' and wd.fa_bh in ('||V_FABHS||')'; 
  V_NSRHS:=0;
  FETCH cur into V_HY_ZD,V_HY_DM; 
  while cur%FOUND LOOP 
  V_SQL_NSR := 'select count(1) from dim_nsr nsr where nsr.'||V_HY_ZD||'='''||V_HY_DM||'''';
  --dbms_output.put_line(V_SQL_NSR);
  EXECUTE IMMEDIATE V_SQL_NSR into V_NSRHSTEMP;
  --dbms_output.put_line(V_NSRHSTEMP);
  V_NSRHS:=V_NSRHS+V_NSRHSTEMP;
  --dbms_output.put_line(V_NSRHS);
  FETCH cur into V_HY_ZD,V_HY_DM; 
  END LOOP;
  CLOSE cur;
  return V_NSRHS;
end F_GET_HYNSR;



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值