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

ओरेकल पीएल/एसक्यूएल फ़ंक्शन नाम संकल्प त्रुटि

समस्या नाम समाधान में से एक है।

जब आपके पास एक पैरामीटर हो hostname और एक hostname आप जिस तालिका का संदर्भ दे रहे हैं, उस कॉलम में स्कोप रिज़ॉल्यूशन नियम अधिकांश लोगों को भ्रमित करते हैं। इसलिए बहुत से लोग पैरामीटर और स्थानीय चर के लिए नामकरण परंपरा का उपयोग करने की सलाह देते हैं जो उन्हें तालिका नामों से अलग करता है। मेरे कोड में, उदाहरण के लिए, मैं p_ . का उपयोग करता हूं पैरामीटर नाम और l_ . उपसर्ग करने के लिए स्थानीय चरों को उपसर्ग करने के लिए।

आपके कोड में, जब आपके पास

SELECT mySystems.SYSTEMID
INTO SysID
FROM mySystems
where mySystems.HOSTNAME = Hostname;

hostname तालिका में कॉलम के रूप में हल किया गया है, पैरामीटर नहीं। यह क्वेरी को तालिका में प्रत्येक पंक्ति को वापस करने का कारण बनता है जहां hostname शून्य नहीं है जो त्रुटि का कारण बनता है। आप hostname . को बाध्य करने के लिए फ़ंक्शन नाम के साथ पैरामीटर नाम को स्पष्ट रूप से उपसर्ग कर सकते हैं पैरामीटर को हल करने के लिए

SELECT mySystems.SYSTEMID
INTO SysID
FROM mySystems
where mySystems.HOSTNAME = GET_SYSTEMID.Hostname;

यह चलने लगा। लेकिन फ़ंक्शन नाम उपसर्ग जोड़ना आम तौर पर परेशान हो जाता है। यदि आप पैरामीटर नामों और स्थानीय चर नामों को उपसर्ग करने की परंपरा को अपनाते हैं, तो आपको कुछ ऐसा मिलेगा

FUNCTION GET_SYSTEMID(p_hostname varchar2)
RETURN NUMBER
IS
    l_sysID number;
BEGIN 
    SELECT mySystems.SYSTEMID
    INTO l_sysID
    FROM mySystems
    where mySystems.HOSTNAME = p_hostname;

    return l_sysID;
END GET_SYSTEMID;

यह भी काम करता है और (मेरे दिमाग में) स्पष्ट फ़ंक्शन नाम उपसर्गों को सभी जगह जोड़ने की तुलना में अधिक स्पष्ट होता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'नहीं' और 'अस्तित्व में नहीं' के बीच क्या अंतर है?

  2. ArrayList समान डेटा को पुनरावृत्त करता है

  3. क्या Azure PHP 7 वेब ऐप में Oracle ड्राइवर हैं?

  4. NLS_UPPER () Oracle में फ़ंक्शन

  5. अधिक सुरुचिपूर्ण एसक्यूएल?