[英]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.