17,089
社区成员
发帖
与我相关
我的任务
分享
create or replace function F_ARPU_3MONTH( v_serv_id in number)
return number
is
AVG_ARPU number := 0;
AVG_ARPU_TMP number := 0;
FISRT_MONTH varchar2(30) :='tjbb10.real_srkh_kh_'||to_char(sysdate,'yyyymm');
SECOND_MONTH varchar2(30) :='tjbb10.real_srkh_kh_'||to_char(add_months(sysdate,-1),'yyyymm');
THIRD_MONTH varchar2(30) :='tjbb10.real_srkh_kh_'||to_char(add_months(sysdate,-2),'yyyymm');
begin
begin
execute immediate 'select sum(ysje) from '||FISRT_MONTH||' where SERV_ID = '||v_serv_id into AVG_ARPU;
exception
when no_data_found then
AVG_ARPU := 0;
end;
begin
execute immediate 'select sum(ysje) from '||SECOND_MONTH||' where SERV_ID = '||v_serv_id into AVG_ARPU_TMP ;
exception
when no_data_found then
AVG_ARPU_TMP := 0;
end;
AVG_ARPU := AVG_ARPU + AVG_ARPU_TMP;
begin
execute immediate 'select sum(ysje) from '||THIRD_MONTH||' where SERV_ID = '||v_serv_id into AVG_ARPU_TMP;
exception
when no_data_found then
AVG_ARPU_TMP := 0;
end;
AVG_ARPU := (AVG_ARPU + AVG_ARPU_TMP) / 3;
return AVG_ARPU;
end F_ARPU_3MONTH;
declare
v_serv_id number:=121; --赋个值测试用
AVG_ARPU number := 0;
AVG_ARPU_TMP number := 0;
FISRT_MONTH varchar2(30) :='tjbb10.real_srkh_kh_'||to_char(sysdate,'yyyymm');
SECOND_MONTH varchar2(30) :='tjbb10.real_srkh_kh_'||to_char(add_months(sysdate,-1),'yyyymm');
THIRD_MONTH varchar2(30) :='tjbb10.real_srkh_kh_'||to_char(add_months(sysdate,-2),'yyyymm');
begin
begin
-- execute immediate 'select sum(ysje) from '||FISRT_MONTH||' where SERV_ID = '||v_serv_id into AVG_ARPU;
--先将字符串用output输出看看是否正确,没问题再执行execute..
exception
when no_data_found then
AVG_ARPU := 0;
end;
begin
-- execute immediate 'select sum(ysje) from '||SECOND_MONTH||' where SERV_ID = '||v_serv_id into AVG_ARPU_TMP ;
exception
when no_data_found then
AVG_ARPU_TMP := 0;
end;
AVG_ARPU := AVG_ARPU + AVG_ARPU_TMP;
begin
--execute immediate 'select sum(ysje) from '||THIRD_MONTH||' where SERV_ID = '||v_serv_id into AVG_ARPU_TMP;
exception
when no_data_found then
AVG_ARPU_TMP := 0;
end;
dbms_output.put_line(AVG_ARPU := (AVG_ARPU + AVG_ARPU_TMP) / 3);
dbms_output.put_line( 'select sum(ysje) from '||FISRT_MONTH||' where SERV_ID = '||v_serv_id);
dbms_output.put_line('select sum(ysje) from '||SECOND_MONTH||' where SERV_ID = '||v_serv_id);
dbms_output.put_line('select sum(ysje) from '||THIRD_MONTH||' where SERV_ID = '||v_serv_id);
end ;