簡體   English   中英

查詢適用於Oracle 10g但不適用於11g?

[英]Query works with Oracle 10g but not with 11g?

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行


任何人都可以復制/解釋這個嗎? 謝謝!

如果你有權訪問支持,它看起來像Bug 9478304:LOOP FAILING WITH ORA-00979:不是表達式的組 這似乎只影響11.2.0.1。

我懷疑你的問題是SELECT中的NULL需要在GROUP BY即使它是一個常量。 我無法想象為什么它可以在Oracle 10中工作,但不能在11中工作。

如果刪除NULL AS dummy_2它是否NULL AS dummy_2

這沒有錯誤:

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;

問題在於使用TRUNC函數中的trn變量和變量。 也許是bug。

截斷內部選擇中的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM