कोडिंग शैली और अनावश्यक नेस्टेड कोष्ठक इसे पढ़ने और व्याख्या करने में वास्तव में कठिन बनाते हैं। लेकिन यह भी मदद करता है कि, कुछ टिप्पणियों के विपरीत, एक ओआरए -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
. है एक सबक्वेरी में काम नहीं करना चाहिए, क्योंकि पंक्तियों का क्रम बाहरी क्वेरी को दिया जाता है और इसका कोई प्रभाव नहीं पड़ता है।
इनलाइन व्यू में इसकी अनुमति/अनदेखा की जाती है, लेकिन नेस्टेड सबक्वायरी में नहीं। (हालांकि कुछ अपवाद भी हो सकते हैं जहां यह अभी भी कोई त्रुटि नहीं फेंकता...)