7
DECLARE
  trn  VARCHAR2(2) := 'DD';
  cur  SYS_REFCURSOR;
BEGIN
  OPEN cur FOR
    SELECT
      TRUNC(some_date, trn),
      NULL AS dummy_2,
      COUNT( DISTINCT dummy_1 )
    FROM
      (SELECT SYSDATE AS some_date, ROWNUM AS dummy_1 FROM dual)
    GROUP BY
      TRUNC(some_date, trn);
END;

これは Oracle 10 で動作しますが、Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production次の結果になります。

ORA-00979: GROUP BY 式ではありません
ORA-06512: 5 行目


誰でもこれを再現/説明できますか? ありがとう!

4

4 に答える 4

6

サポートにアクセスできる場合は、Bug 9478304: LOOP FAILING WITH ORA-00979: NOT A GROUP BY EXPRESSION のようになります。これは 11.2.0.1 のみに影響するようです。

于 2010-12-06T09:52:53.343 に答える
2

あなたの問題は、それが一定であるにもかかわらずNULL、あなたのSELECTニーズが中にあることだと思います。GROUP BYただし、Oracle 10 では機能するのに 11 では機能しない理由は想像できません。

を削除すると機能しますNULL AS dummy_2か?

于 2010-12-06T08:35:36.593 に答える
1

これはエラーなしで動作します:

DECLARE
  trn  VARCHAR2(2) := 'DD';
  cur  SYS_REFCURSOR;
BEGIN
  OPEN cur FOR
    SELECT
      TRUNC(some_date, dtrn),
      NULL AS dummy_2,
      COUNT( DISTINCT dummy_1 )
    FROM
      (SELECT SYSDATE AS some_date, ROWNUM AS dummy_1 FROM dual) data1,
      (SELECT trn AS dtrn FROM dual) data2
    GROUP BY TRUNC(some_date, dtrn);
END;

問題は、関数trn内で使用する変数と変数にありTRUNCます。多分それはバグです。

于 2010-12-06T09:25:38.007 に答える
1

内部選択で sysdate を切り捨てると、正常に動作するように見えます。

DECLARE
  trn  VARCHAR2(2) := 'DD';
  cur  SYS_REFCURSOR;
BEGIN
  OPEN cur FOR
    SELECT
      some_date,
      NULL AS dummy_2,
      COUNT( DISTINCT dummy_1 )
    FROM
      (SELECT trunc(SYSDATE, trn) AS some_date, ROWNUM AS dummy_1 FROM dual)
    GROUP BY
      some_date;
END;
于 2010-12-06T10:58:56.603 に答える