[英]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.