在我们的项目中,我们将所有数据库操作都集中在Oracle存储过程中。结果集由SYS_REFCURSOR类型的OUT参数返回。现在我们有一个分页任务,我们不想重写所有程序,向它们添加2个参数(pageNumber和pageSize)并编辑WHERE子句。我们有一个想法,可以编写某种类型的包装程序,它可以调用每个存储过程,从返回的结果集中获取切片并将其传递出去。问题是所有程序都有不同的参数列表,所以我们不知道如何在包装器中实现它。
有人可以帮助我们吗?也许我们可以使用Java存储过程来解决它?也许,我们可以用不同的方式解决它,而不是使用包装器?
抱歉我的英文。
THX。
答案 0 :(得分:1)
你使用存储过程来执行选择很好,但不幸的是你没有预先考虑所有的要求 - 我猜的敏捷项目;-)我真的认为唯一可行的方法是修改存储过程。那里有多少?如果它非常多,则可能存在编写程序以自动执行任务的情况 - 即读取过程源,添加参数和额外的WHERE子句代码。
答案 1 :(得分:1)
这可能有用,但它是
create or replace function paginate_sys_refcursor (p_page_number in number, p_rows_per_page in number, p_sp_call in varchar2(4000)) return sys_refcursor authid current_user as open p_sysref_cursor for 'select * ' || ' from (select c.*, rownum as rn ' || ' from cursor(' || p_sp_call || ')' || ' where rownum = ' || (p_page_number - 1) * rows_per_page ; ' where rn >= ' || (p_page_number - 1) * rows_per_page ; return p_sysref_cursor; end paginate_sys_refcursor;
答案 2 :(得分:0)
您如何调用存储过程?您是否直接从调用程序打印结果?听起来您可能想要查看可以处理打印的报告工具。