- 论坛徽章:
- 0
|
CREATE OR REPLACE FUNCTION get_localcost(msisdn VARCHAR2) RETURN NUMBER
IS
v_Intercost NUMBER;
v_chargetime VARCHAR2(24);
t_chargetime VARCHAR2(24);
sumIntercost NUMBER;
tempcount NUMBER;
No_result EXCEPTION;
BQ_201111_MSISDN VARCHAR2(800);
bq_sql VARCHAR2(800);
BQ_TAB_MSISDN VARCHAR2(24);
result_sql VARCHAR2(800);
localcost NUMBER;
BEGIN
BQ_TAB_MSISDN:=BQ_TAB_||substr(msisdn,length(msisdn)-2,3);
bq_sql:='declare bq_cusor cursor for select S_16_STTIM,I_COST From '||BQ_TAB_MSISDN||' Where S_24_MSISDN='||msisdn||' And S_4_2=3 Order By S_16_STTIM asc;';
open bq_cusor
loop
fetch bq_cusor into BQ_201111_MSISDN
exit when bq_cusor%notfound;
v_chargetime:=bq_cusor.S_16_STTIM;
v_Intercost:=bq_cusor.I_COST;
if (sumIntercost>=100000 or tempcount>50) then
t_chargetime:=v_chargetime
exit;
end if;
sumIntercost:=sumIntercost+v_Intercost;
end loop;
close bq_cusor;
EXCEPTION
WHEN no_result THEN
DBMS_OUTPUT.PUT_LINE('caculate wrong');
result_sql:='Select sum(I_COST) From '||BQ_TAB_MSISDN||' Where S_24_MSISDN='||msisdn||' And S_4_2!=3 And S_16_STTIM>'||t_chargetime||';'
execute immediate into localcost;
RETURN localcost;
END;
帮忙看下毛病在哪里?是不是begin块不能定义游标,还是有另外的方式可以在begin块定义游标?
定义游标后,应该怎么执行这个游标,让游标生效?
谢谢 |
|