मैंने इस कोड को सीधे SQL डेवलपर से स्थानांतरित कर दिया है। वहां पूरी तरह से काम करता है।

SELECT 
    a.INCIDENT_NUMBER,
    a.DETAILED_DESCRIPTION,    
    a.INCIDENT_ROOT_CAUSE

FROM 
    N_EVALUATION as a

INNER JOIN N_DISPOSITION as b
    ON (a.INCIDENT_NUMBER = b.INCIDENT_NUMBER) 

WHERE
    b.DISPOSITION_LINE_NUM in (NULL, 1) AND
    a.ACTIVE_FLAG = 'Y' AND
    b.ACTIVE_FLAG = 'Y' AND
    a.DETAILED_DESCRIPTION IS NOT NULL

हालाँकि जब मैं एक कस्टम SQL क्वेरी बनाने के लिए उसी सटीक कोड को झांकी में स्थानांतरित करता हूं। यह मुझे एक त्रुटि देता है;

डेटा स्रोत से संचार करते समय एक त्रुटि हुई। खराब कनेक्शन: झांकी डेटा स्रोत से कनेक्ट नहीं हो सकी। Oracle डेटाबेस त्रुटि 907: ORA-00907: सही कोष्ठक गुम है

इसने मुझे पूरी तरह से स्टम्प्ड कर दिया है, वास्तव में यह सुनिश्चित नहीं है कि यहां क्या करना है। किसी भी मदद या सलाह की बहुत सराहना की जाती है। मैं गलत कनेक्शन के बजाय लापता सही कोष्ठक के बारे में अधिक चिंतित हूं।

1
ARJ 20 जिंदा 2020, 04:50

1 उत्तर

सबसे बढ़िया उत्तर

AS को FROM क्लॉज से हटा दें। ओरेकल इसे नहीं पहचानता है।

इसके अलावा, यह शर्त:

 b.DISPOSITION_LINE_NUM in (NULL, 1)

आप जो अपेक्षा करते हैं वह नहीं करता है। यदि b.DISPOSITION_LINE_NUM NULL है तो यह कभी भी सत्य का मूल्यांकन नहीं करता है।

आपको इसे इसके साथ बदलना चाहिए:

 (b.DISPOSITION_LINE_NUM IS NULL OR b.DISPOSITION_LINE_NUM = 1)

अन्यथा, आपकी क्वेरी से ऐसा लगता है कि इसमें संतुलित कोष्ठक हैं, लेकिन आपको इसे इस प्रकार लिखना चाहिए:

SELECT e.INCIDENT_NUMBER, e.DETAILED_DESCRIPTION, e.INCIDENT_ROOT_CAUSE
FROM N_EVALUATION e JOIN
     N_DISPOSITION d
     ON e.INCIDENT_NUMBER = d.INCIDENT_NUMBER
WHERE (d.DISPOSITION_LINE_NUM IS NULL OR d.DISPOSITION_LINE_NUM = 1) AND
      e.ACTIVE_FLAG = 'Y' AND
      d.ACTIVE_FLAG = 'Y' AND
      e.DETAILED_DESCRIPTION IS NOT NULL;

टिप्पणियाँ:

  • मनमानी अक्षरों के बजाय उपयोगकर्ता सार्थक तालिका उपनाम (यह संक्षेप का उपयोग करता है)।
  • FROM खंड में as का प्रयोग न करें।
  • NULL तुलना से सावधान रहें।

अंत में, आपकी मूल क्वेरी इसके बराबर है:

SELECT e.INCIDENT_NUMBER, e.DETAILED_DESCRIPTION, e.INCIDENT_ROOT_CAUSE
FROM N_EVALUATION e JOIN
     N_DISPOSITION d
     ON e.INCIDENT_NUMBER = d.INCIDENT_NUMBER
WHERE d.DISPOSITION_LINE_NUM = 1 AND
      e.ACTIVE_FLAG = 'Y' AND
      d.ACTIVE_FLAG = 'Y' AND
      e.DETAILED_DESCRIPTION IS NOT NULL;

इसका कोई कोष्ठक नहीं है। इसलिए यह उस विशेष त्रुटि को नहीं लौटा सकता है।

2
Gordon Linoff 20 जिंदा 2020, 05:06