oracle存储过程动态条件以及游标问题。
create or replace procedure stat_centeruserstatistic_sp(
i_orgno_no in sunds.bp_centeruserstatistic_tb.organ_no%type, --处理中心
i_flow_node in sunds.bp_centeruserstatistic_tb.flow_node%type, --节点名称
i_user_no in sunds.bp_centeruserstatistic_tb.user_no%type, --柜员号
i_trans_id in sunds.bp_centeruserstatistic_tb.trans_id%type, --业务种类
i_reportFormType in varchar2, --报表类型;0:日,1:月,2:年,3:时段
i_date in sunds.bp_centeruserstatistic_tb.stat_date%type, --日期
i_startdate in sunds.bp_centeruserstatistic_tb.stat_date%type, -- 时段起始日期
i_enddate in sunds.bp_centeruserstatistic_tb.stat_date%type, --时段终止日期
I_PAGE_IDX in varchar2, --页码
cur out sys_refcursor,
O_RET out varchar2,
O_MSG out varchar2) is
v_sql_where_str varchar(4000);
v_sql varchar(4000);
begin
--日统计
if(i_reportFormType='0') then
v_sql_where_str := ' select t.flow_node as flow_node,
t.user_no as user_no,
t.trans_id as trans_id,
sum(t.count)as all_together,
sum(decode(t.stat_flag,''01'',t.count,0))as suc_count,
sum(decode(t.stat_flag,''00'',t.count,0))as non_count,
round(sum(decode(t.stat_flag,00, t.count,0))/sum(t.count)*100,2) as non_proba,
round(sum(t.con_time) / sum(t.count),2) as avg_times
from sunds.bp_centeruserstatistic_tb t
where t.organ_no= '||chr(39)||i_orgno_no||chr(39)
||'and t.stat_date='||chr(39)||i_date||CHR(39);
if i_flow_node is not null then
v_sql_where_str := v_sql_where_str ||'and t.flow_node ='||
chr(39) || i_flow_node || chr(39);
end if;
if i_user_no is not null then
v_sql_where_str := v_sql_where_str || 'and t.user_no ='||
chr(39) || i_user_no ||chr(39);
end if;
if i_trans_id is not null then
v_sql_where_str := v_sql_where_str ||' and t.trans_id ='||
chr(39) || i_trans_id ||chr(39);
end if;
v_sql_where_str := v_sql_where_str ||'group by t.user_no,t.flow_node,t.trans_id
order by t.flow_node,t.user_no;';
--dbms_output.put_line('v_sql_where_str:'|| v_sql_where_str);
open cur for v_sql_where_str;
O_RET := '0';
O_MSG := '查询成功';
end if;
exception
when others then
O_RET := 'SP01000';
O_MSG := '查询失败';
end stat_centeruserstatistic_sp;
/
经调试,总是在open这块跑异常,不知道什么原因,求高手指点下,本人也才学的存储过程。。。谢谢
------解决方案-------------------- --dbms_output.put_line('v_sql_where_str:'|| v_sql_where_str);
这句不要注释掉,把sql语句打出来直接执行看看什么错误,现在这样看不清楚