2010-12-06 94 views
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它導致:查詢適用於Oracle 10g,但不適用於11g?

ORA-00979:不是GROUP BY表達
ORA-06512:在第5行


任何人都可以重現/解釋這個?謝謝!

+0

我使用這個對,我想,以決定是否記錄應該按天或按小時分組統計。 – 2010-12-06 08:25:52

+0

在我的11gR2(64位)上正常工作。以防萬一,完整的橫幅:Oracle數據庫11g企業版版本11.2.0.1.0 - 64位生產 使用分區,OLAP,數據挖掘和實際應用測試選項 – 2010-12-06 10:47:47

回答

2

我懷疑你的問題是你的SELECT中的NULL需要在GROUP BY中,即使它是一個常量。但我無法想象它爲什麼能在Oracle 10中運行,但不是11。

如果您刪除NULL AS dummy_2,它工作正常?

+0

是的,它工作,如果我刪除查詢的任何部分,甚至「DISTINCT」關鍵字有所不同。通過`NULL`分組不會有幫助... – 2010-12-06 08:41:00

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功能使用。也許這是錯誤。

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; 
相關問題