create or replace package testpackage as  
  TYPE test_cursor is ref cursor;  
end testpackage;  
/
--开始编写分页的过程  
create or replace procedure fenye  
(tableName in varchar2,  
fileterStr in varchar2,--查询的条件
     Pagesize in number,--一页显示记录数  
     pageNow in number,  
     myrows out number,--总记录数  
     myPageCount out number,--总页数  
     p_cursor out testpackage.test_cursor,--返回的记录集 
     actionType  in  integer   --行为类型,只有点击查询的时候才计算总记录数和总页数
--而在分页查询的时候则不进行以上计算,从而节省资源
    ) is  
--定义部分  
--定义sql语句 字符串  
v_sql varchar2(1000);  
--定义两个整数  
v_begin number:=(pageNow-1)*Pagesize+1;  
v_end number:=pageNow*Pagesize;  
begin  
v_sql:=' select  *  from  ( select  
NVL2(to_char(INPUT_TIME,'yyyy-mm-dd HH24:MI::SS'), INPUT_TIME,
to_date('2010-8-1','yyyy-mm-dd HH24:MI::SS') )  
from  '||tableName||'  t1  '|| fileterStr||' )  
 where  rn>='||v_begin||'  and  rn<='||v_end; 
open p_cursor  for  v_sql;

--计算myrows和myPageCount  
--组织一个sql语句  
--v_sql:='select count(*) from '|| tableName ||fileterStr;  
If  actionType=0  then      --如果当前的操作是点击查询按钮
begin
v_sql:='select count(*) from ’|| tableName||fileterStr;
--执行sql,并把返回的值,赋给myrows;  
execute immediate v_sql into myrows;  
--计算myPageCount  
--if myrows%Pagesize=0 then这样写是错的  
if mod(myrows,Pagesize)=0 then  
    myPageCount:=myrows/Pagesize;  
else  
    myPageCount:=myrows/Pagesize+1;
end if;  
end;
END IF;
--关闭游标  
--close p_cursor;  
end;
/红色部分为出问题的地方。
如果单纯把这段运行是没问题的,这个问题困扰我很长时间了,有什么办法解决没有?
问题说到底就是:
如果时间值是空的,如何将这个空值替换成一个特定的值,避免程序调用这个存储过程出错!

解决方案 »

  1.   

    你这个品字符串有问题 注意中间要两个引号阿v_sql:=' select * from ( select 
    NVL2(to_char(INPUT_TIME,''yyyy-mm-dd HH24:MI::SS''), INPUT_TIME,
    to_date(''2010-8-1'',''yyyy-mm-dd HH24:MI::SS'') ) 
    from '||tableName||' t1 '|| fileterStr||' ) 
    where rn>='||v_begin||' and rn<='||v_end;
    别粗心
      

  2.   

    擦了,回的什么玩意,明白意思v_sql:=' select * from ( select 
    NVL2(to_char(INPUT_TIME,''yyyy-mm-dd HH24:MI::SS''), INPUT_TIME,
    to_date(''2010-8-1'',''yyyy-mm-dd HH24:MI::SS'') ) 
    from '||tableName||' t1 '|| fileterStr||' ) 
    where rn>='||v_begin||' and rn<='||v_end; 
    open p_cursor for v_sql;