समस्या नाम समाधान में से एक है।
जब आपके पास एक पैरामीटर हो 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;
यह भी काम करता है और (मेरे दिमाग में) स्पष्ट फ़ंक्शन नाम उपसर्गों को सभी जगह जोड़ने की तुलना में अधिक स्पष्ट होता है।