我有一个在Oracle中创建的视图。它返回行,但是当我通过Crystal Reports使用它时,我没有行。我已经收窄,这CTE在视图背后的查询:Oracle返回行 - Crystal报告不包含
WITH PERIODS AS (
SELECT
ROWNUM-13 RN,
TO_DATE('01-JUL-' || TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE),-6), 'YYYY')) AS FISCAL_YEAR_START,
ADD_MONTHS(TO_DATE('01-JUL-' || TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE),-6), 'YYYY')), ROWNUM-13) AS MONTH
FROM
DUAL
CONNECT BY
ROWNUM <= 24
)
这是很奇怪的,因为如果我用下面的替换此CTE,它的工作原理(这第二个查询是原始报表有什么,但由于寻找财政年度的逻辑问题,它必须改变)。
WITH PERIODS AS (
SELECT
ROWNUM-13 RN,
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6) AS FISCAL_YEAR_START,
TRUNC(ADD_MONTHS(ADD_MONTHS(TRUNC(sysdate,'yyyy'),6), ROWNUM-13),'MONTH') MONTH
FROM
DUAL
CONNECT BY
ROWNUM <= 24
)
任何想法为什么第二个CTE导致Crystal报告不拉任何记录?这两个查询肯定都有返回的行,只是Crystal Reports不喜欢第一个查询(尽管我不明白为什么,因为我会认为Crystal只是简单地向Oracle查询数据,而不会被后面的内容困扰视图?!)
这不会简化到这一点,因为这不会动态拉动当前的财政年度,而这正是该声明实现的目标。不,任何地方都没有错误。这两个语句在查询表时返回相同的结果;只是Crystal Reports认为它返回第一个语句的0行。 – Lock
我知道它会根据sysdate而有所不同。问题在于你没有第二个参数给'TO_DATE',这使得它取决于会话级别的设置,这取决于你的连接方式。 –
哦,对了,得到了!那确实很合理。我不明白的是为什么我可以从一个程序中选择数据,但不是另一个?我会认为视图背后的日期格式取决于oracle服务器,而不是应用程序设置(因为它是一个视图,我希望这部分对应用程序是透明的) – Lock