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;
/红色部分为出问题的地方。
如果单纯把这段运行是没问题的,这个问题困扰我很长时间了,有什么办法解决没有?
问题说到底就是:
如果时间值是空的,如何将这个空值替换成一个特定的值,避免程序调用这个存储过程出错!
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;
/红色部分为出问题的地方。
如果单纯把这段运行是没问题的,这个问题困扰我很长时间了,有什么办法解决没有?
问题说到底就是:
如果时间值是空的,如何将这个空值替换成一个特定的值,避免程序调用这个存储过程出错!
解决方案 »
- |zyciis| 求Oracle解释 表300W条数据我进行Update,一天不有反应,但我分段Update 5分种搞定,这是怎么回事?求解释
- 【求助】:oracle 监听启动失败,TNS-01189: The listener could not authenticate the user
- 求完成类似功能的Sql语句
- 求一个排序的sql语句 急急
- oracle 怎么这么难用啊?请教下
- 请教:在本地计算机无法启动OracleOraHome92TNSListener服务,怎么办?
- 菜鸟问题!谢谢!
- 一颗红星,闪闪分!
- 用Oracle Enterprise Manager Console查看会话信息时,SID左边连接图标有时显示为时钟图标,表示什么呢
- 初学一篇!
- VC中try为什么不能捕捉到ADO异常?
- WIN764wei ORACLE 11G R2 新建数据库实例报进程出现错误
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;
别粗心
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;