2010-12-06 11 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; 

यह ओरेकल 10 के साथ काम करता है, लेकिन Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production के साथ में जो परिणाम: अभिव्यक्ति द्वारा नहीं एक ग्रुप
ORA-06512:प्रश्न ओरेकल 10 जी के साथ काम करता है लेकिन 11 जी के साथ नहीं?

ORA-00979 लाइन 5


पर

क्या कोई इसे पुन: पेश/समझा सकता है? धन्यवाद!

+0

मैं आँकड़ों जहाँ मैं रिकॉर्ड दिन या घंटे के आधार पर वर्गीकृत किया जाना चाहिए तय करने के लिए चाहते हैं के लिए इस का उपयोग कर रहा हूँ। –

+0

मेरे 11 जीआर 2 (64-बिट) पर ठीक काम करता है। बस मामले में, पूर्ण बैनर: ओरेकल डेटाबेस 11 जी एंटरप्राइज़ संस्करण रिलीज 11.2.0.1.0 - 64 बिट उत्पादन विभाजन, ओलाप, डेटा खनन और वास्तविक अनुप्रयोग परीक्षण विकल्पों के साथ –

उत्तर

6

यदि आपके पास समर्थन की पहुंच है, तो यह Bug 9478304: LOOP FAILING WITH ORA-00979: NOT A GROUP BY EXPRESSION जैसा दिखता है। यह केवल 11.2.0.1 को प्रभावित करता है।

+0

यही है, बहुत बहुत धन्यवाद! पैरेंट बग का सुझाव दिया गया कार्य ('_optimizer_distinct_agg_transform = false') समस्या हल करता है। –

2

मुझे संदेह है कि आपकी समस्या यह है कि आपके SELECT में GROUP BY में होने की आवश्यकता है, भले ही यह स्थिर है। मैं कल्पना नहीं कर सकता कि यह ओरेकल 10 में क्यों काम करेगा लेकिन 11 नहीं, हालांकि।

यदि आप NULL AS dummy_2 हटाते हैं तो यह काम करता है?

+0

हाँ, यह काम करता है अगर मैं क्वेरी के किसी हिस्से को हटा देता हूं, यहां तक ​​कि 'DISTINCT'-keyword एक फर्क पड़ता है। 'NULL' द्वारा ग्रुपिंग मदद नहीं करता है ... –

+1

निश्चित रूप से ओरेकल में एक बग की तरह लगता है। – Gabe

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; 
संबंधित मुद्दे