gpt4 book ai didi

postgresql - Birt 报告 - 未从 Postgres RefCursor 获取数据

转载 作者:行者123 更新时间:2023-11-29 14:22:09 27 4
gpt4 key购买 nike

我有这个:

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

数据集 --> MyDataset --> select * from test_birt(?::bigint)

截图如下:

报表设计 enter image description here

报告预览 enter image description here

我需要 Birt 显示 MY_TABLE 的值!!在这种情况下,该表有一个 varchar 字段,其值:TEST1TEST2TEST3Birt 版本为 3.2postgres9.2

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

RETURNS SETOF my_type AS

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

最佳答案

您错过了 FETCH 语句。

当您调用函数时,会创建(并打开)游标“tcursor”。但是没有人试图从中读取。如果没有 Birt 的明确支持,就不可能调用函数并从游标中获取数据。你可以尝试一个 hack - 可以工作或不工作(取决于 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;

关于postgresql - Birt 报告 - 未从 Postgres RefCursor 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20748149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com