0

我有一个我在 Oracle 中创建的视图。它返回行,但是当我通过 Crystal Reports 使用它时,我没有得到任何行。我在视图后面的查询中将其缩小到这个 CTE:

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 查询数据,而不会被后面的内容所困扰风景?!)

4

2 回答 2

0

不知道为什么,但我将 CTE 更改为以下内容并且它有效:

 SELECT
    ROWNUM-13 RN,
    ADD_MONTHS(TRUNC(ADD_MONTHS(SYSDATE,6),'YYYY'),-6) AS FISCAL_YEAR_START,
    ADD_MONTHS(ADD_MONTHS(TRUNC(ADD_MONTHS(SYSDATE,6),'YYYY'),-6), ROWNUM-13) MONTH
  FROM
    DUAL
  CONNECT BY
    ROWNUM <= 24

我仍然很想知道为什么视图后面的查询会影响 Crystal Reports!

于 2013-01-06T23:33:29.373 回答
0

在您的第一个查询中,这一行:-

TO_DATE('01-JUL-' || TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE),-6), 'YYYY')) AS FISCAL_YEAR_START

将简化为:-

TO_DATE('01-JUL-2012')

Oracle 将使用默认日期格式进行转换。

当您通过 Crystal Reports 连接时,可能设置不同。更好的做法是通过向 TO_DATE 提供第二个参数来显式设置日期格式。

Crystal Reports 是否报告了 ORA 错误,例如ORA-01861: literal does not match format string

于 2013-01-08T06:01:48.847 回答