“总结一下本人在项目中遇到的问题,如何在数据库表名未知且作为一种查询条件的情况下查询出数据集,仅能通过FineReport+Oracle实现。
首先分析这个问题的条件和要求:
条件:只有一个ID,依靠这个ID能查询出一个数据库表名的集合(表名是通过各种字段拼接起来的)
要求:要遍历这个数据库表名集合查询出对应的数据
FineReport即帆软,可以制作模版,通过传入变量执行模版中的SQL来生成报表。但是我无法将一个数据库表名的集合传入帆软模版,这样只能通过帆软本身查出数据库表名的集合。在有限的时间里我了解到要实现这样的功能最直接的方法就是采用Oracle的存储过程。通过各种百度、摸索最终实现了FineReport调用存储过程。总结如下。”
一.存储过程(参数,变量,游标)
1.测试表:
2.带参数的存储过程
2.1创建一个存储过程:在Procedures文件夹右键New
2.2带参数的存储过程
create or replace procedure test(param1 in varchar2, item out sys_refcursor) as begin open item for select * from TT_CLASS_20160912 tt where tt.length = param1; end;
这里创建的是一个名为“test”的存储过程,有两个参数,param1为输入参数,item为输出参数,从“in”和“out”就可以看出来,“varchar2”和“sys_refcursor”为参数类型,其中“sys_refcursor”为游标,其实就是一个数据集合。
F8执行一次就会在Oracle里创建一个存储过程,实际上是一个编译过程。