我有一个报告,它从Oracle PL / SQL函数中选择数据。此函数执行一个非常复杂的逻辑,并将表返回给查询执行程序(JasperServer)。
如果我只是通过单击报告名称从JasperServer运行此报告,它运行良好并按预期返回结果,如果我从JasperSoft Studio运行它,则相同。
但是,如果我设置了一个调度程序并且在给定时间内从调度程序运行报告,它也运行良好并返回正确的结果,但是在Oracle数据库上执行TWICE的PL / SQL函数。我可以看到它,因为该函数在数据库中生成日志消息(两次)。第二次执行在第一次执行完成后立即开始。从表格或视图或其他功能中进行选择时,我从未想过这种情况。只有在安排报告时才会发生这种情况,或者"在后台运行..."。
有没有人知道为什么会发生这种情况?这种行为可能是什么原因?
我的部分报告XML在下面。
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
<queryString language="SQL">
<![CDATA[SELECT (TRUNC(SYSDATE) - to_number(TO_CHAR(sysdate, 'd')) - 6) week_start,
(TRUNC(SYSDATE) - to_number(TO_CHAR(sysdate, 'd')) + 1 - 1/24/3600) week_end,
b15.subrepid,
b15.subrepname,
b15.numof,
b15.volume,
b15.revenue
FROM TABLE(bs01.TEST_XBTOP_P_reports.bsr015()) b15]]>
</queryString>
<field name="WEEK_START" class="java.sql.Timestamp"/>
<field name="WEEK_END" class="java.sql.Timestamp"/>
<field name="SUBREPID" class="java.lang.String"/>
<field name="SUBREPNAME" class="java.lang.String"/>
<field name="NUMOF" class="java.math.BigDecimal"/>
<field name="VOLUME" class="java.math.BigDecimal"/>
<field name="REVENUE" class="java.math.BigDecimal"/>
<sortField name="SUBREPID"/>
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
我的PL / SQL功能是:
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
CREATE OR REPLACE PACKAGE body TEST_XBTOP_P_reports
AS
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
FUNCTION bsr015
RETURN xbtop_y_bsr015_tab
AS
r_tab xbtop_y_bsr015_tab := xbtop_y_bsr015_tab();
subrepid CHAR(2);
subrepname CHAR(35);
numof NUMBER;
volume NUMBER;
revenue NUMBER ;
systimestamp_hostname VARCHAR2(200 CHAR);
BEGIN
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
我运行JasperReports Server Community 6.3和Oracle SE 11.2.0.3.0。
任何想法都会受到更多的赞赏。
谢谢你,亲切的问候
的Pawel