NVL2对时间空值的处理的问题

yanhuashuicun 2011-08-05 03:53:23
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;
/

红色部分为出问题的地方。
如果单纯把这段运行是没问题的,这个问题困扰我很长时间了,有什么办法解决没有?
问题说到底就是:
如果时间值是空的,如何将这个空值替换成一个特定的值,避免程序调用这个存储过程出错!
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Diza1986 2011-08-05
  • 打赏
  • 举报
回复
我哭了 粘贴下来就。。。。
Diza1986 2011-08-05
  • 打赏
  • 举报
回复
擦了,回的什么玩意,明白意思

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;

Diza1986 2011-08-05
  • 打赏
  • 举报
回复
你这个品字符串有问题 注意中间要两个引号阿

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;


别粗心

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧