报表数据集

1 动态数据集

在报表传参的时候,如果有一些参数并没有传进去值,而且又想让报表展现出来 这时候需要设置动态数据集。

1、设计报表demo.brt 如图所示:

2、新建数据集

ds: select * from 订单 

3、新建参数 diqu、city,中文描述分别为地区、城市,参数类型为字符串。如图所示:

  

4、新建变量sql。如图所示:

5、将参数和变量加到sql语句中。

="select * from 订单 where 1=1 "+if(@city=null,""," and 货主城市='"+@city+"'")
  +if(@diqu=null,""," and 货主地区='"+@diqu+"'")+"${sql}"

if(@city=null,""," and 货主城市='"+@city+"'") 的意思就是 如果你的参数没值时就不执行这个条件。

6、设置完毕后,动态数据集就设计完成了。

7、预览demo报表。

预览时,参数和变量都没有赋值,点击确定,报表也出来了。

2 动态数据集的另一种写法

除了用拼串的方式写动态数据集,也可以不拼串,用?表示参数。

1、基本方法就是在sql语句的条件里写 where 字段名=? or ?='1',写法如下图

2、在数据集参数中,在对应的第二个数据集参数处写if(@参数名==null,'1','0'),其实质也是当参数为空时并一个1=1的条件。

3、当参数多选时,参数类型为字符串组或数组,把 where 字段名=? 改为 where 字段名 in (?)

3 存储过程

创建oracle存储过程

--建立一个游标 
CREATE OR REPLACE PACKAGE TYPES AS
TYPE BJ _CURSOR IS REF CURSOR;
END;

--创建存储过程
CREATE OR REPLACE PROCEDURE BJ_TEST_PROC
(
  PID IN VARCHAR,
  V_TEMP OUT TYPES.BJ_CURSOR
)
AS
BEGIN
  OPEN V_TEMP FOR SELECT NAME FROM TEST WHERE ID = PID;
END BJ_TEST_PROC;

数据集中调用oracle存储过程

1、 在摘要视图选择新建数据集。

2、在新建数据集界面中设置好名称、数据源,类型选择存储过程。

3、点击下一步,在“编辑数据查询语句”界面写入调用存储过程语句{call BJ_TEST_PROC (?,?)}

4、点击下一步,在数据集参数界面,将相应的?对应的参数对应上。

5、存储过程就创建成功了。

创建sqlserver存储过程

--这里的示例是带有临时表的存储过程 
create proc PRE_BJ_TEST
as
SET NOCOUNT ON 
create table #temptable1 (
  id varchar(12) primary key ,
  name varchar(12),
  value varchar(23)
)
insert into #temptable1 
select '1','name','value'
select * from #temptable1
go 

数据集中调用sqlserver存储过程

1、 在摘要视图选择新建数据集。

2、在新建数据集界面中设置好名称、数据源,类型选择存储过程。

3、点击下一步,在编辑查询SQL界面写入sql语句。

{call PRE_BJ_TEST ()}

4、点击下一步,在数据集参数界面,将相应的?对应的参数对应上(示例存储过程并没有参数,所以数据集参数就不用设置了)。

5、存储过程就创建成功了。

注意

1、这个存储过程是oracle数据库的存储过程,有两个参数,一个‘in’参数,一个是返回的游标数据。

2、在数据集参数选中参数界面,游标类型的参数就选中存储过程输出参数。

4、db2数据库的存储过程需要创建游标,然后在数据集创建时,返回的游标类型的参数就不用在数据集参数选择里选择存储过程输出参数。

5、sqlserver的存储过程不需要创建游标,也不需要在数据集参数选择里选择存储过程输出参数。

6、有时候存储过程的树形下拉字段不出现,如果需要这个字段就写ds.select(#1)或 ds.#3(#0是序号,列的序号从1开始,第一列是#1、第二列是#2...)。