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を次のように置き換えると、機能します(この2番目のクエリは元のレポートのクエリですが、会計年度を見つける際の論理的な問題のため、変更する必要がありました)。

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
)

2番目の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 に 2 番目の引数を指定して、日付形式を明示的に設定することをお勧めします。

Crystal Reports は、おそらく次のような ORA エラーを報告しましたORA-01861: literal does not match format stringか?

于 2013-01-08T06:01:48.847 に答える