Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

आंतरिक क्वेरी के साथ ORDER BY, ORA-00907 लापता सही कोष्ठक दे रहा है

कोडिंग शैली और अनावश्यक नेस्टेड कोष्ठक इसे पढ़ने और व्याख्या करने में वास्तव में कठिन बनाते हैं। लेकिन यह भी मदद करता है कि, कुछ टिप्पणियों के विपरीत, एक ओआरए -00907 का मतलब हमेशा असमान संख्या में कोष्ठक नहीं होता है, यह एक अधिक सामान्य वाक्यविन्यास त्रुटि को इंगित कर सकता है जिसके कारण पार्सर को जमानत मिल गई है। इस मामले में यह बहुत मददगार नहीं है।

समस्या order by . है उपश्रेणी के भीतर अंतिम पंक्ति पर खंड, जिसकी तुलना आप in . से कर रहे हैं :

...
AND RUN.RN_RUN_ID in(Select max(RUN.RN_RUN_ID) From (((((((RELEASES JOIN RELEASE_CYCLES
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965
ORDER BY TESTCYCL.TC_TESTCYCL_ID)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

अंतिम आदेश देने की स्पष्ट रूप से अनुमति है, लेकिन उस सबक्वायरी में ऐसा नहीं है। तो यह खत्म हो जाना चाहिए:

...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

मैं इसका परीक्षण नहीं कर सकता क्योंकि मेरे पास आपकी स्कीमा नहीं है, लेकिन एक सरल डेमो प्रदर्शित करने में मदद कर सकता है:

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
  order by d2.dummy
)
order by d1.dummy;

Error at Command Line : 6 Column : 3
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"

आंतरिक order by द्वारा हटाया जा रहा है :

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
)
order by d1.dummy;

DUMMY
-----
X     

यह एक ) देखने की उम्मीद कर रहा है इसके बजाय order by , तो त्रुटि कुछ समझ में आती है, एक बार जब आप जानते हैं कि यह क्या गलत है; लेकिन यह वास्तव में इसे कम करने में आपकी मदद नहीं करता है।

संयोग से, यह Oracle समर्थन दस्तावेज़ 731577.1 में संदर्भित है:

<ब्लॉकक्वॉट>

ORA-00907: missing right parenthesis order by . का उपयोग करते समय एक उपश्रेणी में खंड। जब ORDER BY क्लॉज हटा दिया गया है क्वेरी त्रुटि के बिना चलती है।

...
यह अपेक्षित व्यवहार प्रति बग 4944718order by . है एक सबक्वेरी में काम नहीं करना चाहिए, क्योंकि पंक्तियों का क्रम बाहरी क्वेरी को दिया जाता है और इसका कोई प्रभाव नहीं पड़ता है।

इनलाइन व्यू में इसकी अनुमति/अनदेखा की जाती है, लेकिन नेस्टेड सबक्वायरी में नहीं। (हालांकि कुछ अपवाद भी हो सकते हैं जहां यह अभी भी कोई त्रुटि नहीं फेंकता...)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle 10g कॉलम अस्पष्टता के बारे में शिकायत क्यों नहीं करता है?

  2. आरएसी अनुक्रम विवाद

  3. ओरेकल पर अद्यतन कैस्केड के साथ एक विदेशी कुंजी कैसे बनाएं?

  4. बाइंड चर और प्रतिस्थापन चर (जो मैं &&का उपयोग करके इनपुट करता हूं) के बीच अंतर क्या है?

  5. Mac OS X पर Oracle 11g