簡體   English   中英

Birt報告-未從Postgres RefCursor獲取數據

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

BIRT

數據集-> MyDataset-> select * from test_birt(?::bigint)

這里的截圖:

報告設計 在此處輸入圖片說明

報告預覽 在此處輸入圖片說明

我需要Birt顯示MY_TABLE的值! 在這種情況下,此表具有一個varchar字段,其值是: TEST1TEST2TEST3 Birt版本是3.2 ,而postgres9.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM