Birt报告 - 没有从Postgres RefCursor获取数据

时间:2013-12-23 17:19:01

标签: postgresql birt

我有这个:

POSTGRES

/*THE PARAMETER in_test_id IS ONLY A TEST!!*/
CREATE OR REPLACE FUNCTION public.test_birt(in_test_id bigint DEFAULT NULL::bigint)
  RETURNS refcursor AS
$BODY$
DECLARE
    query text;
    tcursor   refcursor = 'tcursor';
BEGIN
    query := 'SELECT * FROM MY_TABLE';

    OPEN tcursor FOR execute query;
    return tcursor;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

BIRT

DATASET - > MyDataset - > select * from test_birt(?::bigint)

这里有截图:

报告设计 enter image description here

报告预览 enter image description here

我需要 Birt 显示 MY_TABLE !!的值。在这种情况下,此表格有一个 varchar 字段,其值为: TEST1 TEST2 TEST3 Birt 版本 3.2 postgres 9.2

注意我找到的唯一解决方案是创建数据类型并从我的函数更改返回数据类型,如下所示:

RETURNS SETOF my_type AS

但是我需要Bird可以阅读这个RefCursor。

1 个答案:

答案 0 :(得分:3)

你错过了一个FETCH声明。

调用函数时,会创建(并打开)光标“tcursor”。但没有人试图从中读取。如果没有Birt中的明确支持,则无法调用函数并从游标中获取数据。您可以尝试黑客 - 可以工作与否(取决于Birt中的实现) - 使用以下命令作为数据集的来源:

SELECT test_birt(?::bigint); FETCH ALL FROM tcursor;

我发现link表明Birt 5年前并不支持它。

另一方面。在9.2中,您不需要为返回表定义自己的类型。您可以使用表类型 - 何时可以返回所有列,或者可以通过TABLE关键字定义输出列:

 CREATE TABLE foo(a int, b int); -- automatically it defined type foo

 CREATE OR REPLACE FUNCTION read_from_foo_1(_a int)
 RETURNS SETOF foo AS $$
   SELECT * FROM foo WHERE foo.a = _a;
 $$ LANGUAGE SQL;

 CREATE OR REPLACE FUNCTION read_from_foo_2()
 RETURNS TABLE(a int, b int, c int) AS $$
   SELECT a, b, a + b FROM foo;
 $$ LANGUAGE SQL;