知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > V5自定义函数实现动态生成sql

V5自定义函数实现动态生成sql

我们之前都做过使用宏来动态生成sql查询条件,在宏里判断参数再传sql语句到数据集。这个方法在查询一个或多个确定的 物理表数据的时候很好用。 但是如果想要根据参数动态从不同的物理表查询数据怎么实现呢?比如根据用户选择的不同月份,来动态生成表名,客户的表结构都是一 样的,每个月会生成一个,比如tab1,tab2,后面表示月份.   比如:客户选择了开始时间 2013-6-15  结束时间 2013-8-15 就要把 tab6,tab7,tab8三个表的数据查询出来.

 

 下面我做了一个demo,写了一个自定义类来实现根据参数动态生成sql从不同表查询数据。

 

1,先建立了 12个表结构相同的数据表,tab1-tab12 (表名由1-12这样的顺序)。

 

 

2,新建报表建立参数模板 还有主表

 

 

 

3,主表的数据集定义

 

 

 

 

其中arg1 ,arg2 接收参数模板传来的日期参数,

Arg4 ,arg5  判断日期的月份

Arg3  则是要拼接的sql 语句  select * from tab

在宏里面用到一个getsql函数,这个类是自己定义的

是将获取到的 2个数 还有sql  拼接成sql语句并返回

如 getsql(2,3,”select * from tab”)  则返回 select * from tab2 union select *from tab3

动态的生成从这存储这2个月份的表中查询数据。

 

3现在演示一下 查询

 

下面是生成的sql语句

 

再查询 1-3月试试

 

则又生成了 从tab1 tab2 tab3个表查询数据的失去了。

这样根据参数动态生成sql 就避免了直接计算大数据量

另外@arg3 里面的sql语句也可以换成别的 如果要加where条件的话就需要多加参数,并重写这个getsql类了。

 

 

数据库文件,raq文件 还有类文件见附件。

 

登记自定义类的时候把api文件夹放到 下面路径里

E:\集深0816\GEEZNV5.0\tomcat\webapps\reportmis\WEB-INF\classes 

 

并在config文件夹下 customFunctions.properties文件里加上要登记的类,属性加上

 

 

 

登记好以后这样方法就可以用了。

 

本文标签:
发布日期:2013/09/04
本文分类: 知识库