使用 JasperReports 参数调用 PostgreSQL 函数

问题描述 投票:0回答:1

我创建了一个 PostgreSQL 函数

icalldetailsByAN(hNametext,start_date timestamp,end_date timestamp))

尝试通过更新 Jaspersoft Studio 中的数据集和查询编辑器来绑定我的 JasperReports 报告

select * from icalldetailsByAN($P{hName},$P{startDate},$P{endDate})

我没有得到结果

hName、startDate、endDate 是我在报告中创建的参数,它将作为函数的输入参数

icalldetailsByAN

当我使用输入从 PostgreSQL 执行函数 icaldetailsByAN 时,我得到正确的结果,但不确定我到底犯了什么错误。

postgresql stored-procedures jasper-reports
1个回答
0
投票

对于任何想要使用 Postgresql 函数打印 jasper 报告的人。 Jasper 报告不支持 PostgreSQL 的 refcursor,如 Oracle REF_CURSOR。另一种方法是将函数更改为返回表而不是游标。例如:

CREATE OR REPLACE FUNCTION your_sql_function (
    p_param_1 VARCHAR,
    p_param_2 VARCHAR,
    ...,
    p_param_n VARCHAR
) RETURNS TABLE (
    col_1 VARCHAR,
    col_2 VARCHAR,
    ...,
    col_n VARCHAR
)
AS $$
BEGIN
    RETURN QUERY SELECT 
             col_1,
                     col_2,
                     ...,
                     col_n,
                  FROM 
                     table
                  WHERE cola=p_param_1
                    AND colb=p_param_2;
END;
$$ LANGUAGE plpgsql STRICT;

然后在 Jasper 报告模板中像普通查询一样选择

<queryString language="SQL">
        <![CDATA[
            SELECT
                *
            FROM
                your_sql_function(
                    $P{param_1},
                    $P{param_2},
                    ...,
                    $P{param_n}
                )
        ]]>
    </queryString>
© www.soinside.com 2019 - 2024. All rights reserved.