[英]Birt Report - Not gettting data from Postgres RefCursor
我有这个:
/*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;
数据集-> MyDataset-> select * from test_birt(?::bigint)
这里的截图:
报告设计
报告预览
我需要Birt显示MY_TABLE的值! 在这种情况下,此表具有一个varchar字段,其值是: TEST1 , TEST2 , TEST3 。 Birt版本是3.2 ,而postgres是9.2 。
注意我发现的唯一解决方案是创建一个数据类型并从函数中更改返回数据类型,如下所示:
RETURNS SETOF my_type AS
但我需要Bird可以阅读此RefCursor。
您错过了一条FETCH语句。
调用函数时,将创建(并打开)游标“ tcursor”。 但是没有人尝试阅读它。 如果没有Birt的明确支持,就无法调用函数并从游标中获取数据。 您可以尝试破解-是否有效(取决于Birt中的实现)-使用以下命令作为数据集的来源:
SELECT test_birt(?::bigint); FETCH ALL FROM tcursor;
我发现显示的链接使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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.