आपके प्रश्न का उत्तर देने के लिए कि यह नल क्यों डाल रहा है, ऐसा इसलिए है क्योंकि आप इसे निष्पादित करते समय प्रक्रिया पैरामीटर को कोई मान प्रदान नहीं कर रहे हैं।
आपने प्रश्न में जो कहा है और ऊपर आपकी टिप्पणी के आधार पर, ऐसा लगता है कि आप Oracle के साथ काम करने में कुछ मौलिक कौशल खो रहे हैं। आपके द्वारा लिखा गया कोड एक प्रक्रिया है, एक फ़ंक्शन नहीं, इसलिए आप इसे SELECT
में कॉल नहीं कर सकते बयान। एक plsql ब्लॉक के अंदर एक प्रक्रिया कहा जाता है। लिखित रूप में आपकी प्रक्रिया में दो तर्क होते हैं, जिन्हें आपको कॉलिंग कोड के माध्यम से प्रक्रिया कॉल में पास करना होगा। आपके द्वारा लिखा गया प्रक्रिया कोड XML_HOURS_LOAD
. के डेटा की तलाश नहीं करता है टेबल।
हम सभी Oracle सीखने वाले नए व्यक्ति हैं। कार्यों और संग्रहीत प्रक्रियाओं के बीच अंतर को दूर करने और पैरामीटर तर्कों का उपयोग करने के तरीके को स्पष्ट करने में सहायता के लिए आप pl/sql कोडिंग के मूल सिद्धांतों पर आरंभ करने के लिए कुछ ट्यूटोरियल देखना चाहेंगे।
आपने अपने प्रश्न में जो लिखा है, उससे मेरा मानना है कि यह वह कोड है जो आप चाहते हैं:
DECLARE
p_code IS XML_HOURS_LOAD.code%TYPE,
p_product IS XML_HOURS_LOAD.product%TYPE;
CURSOR cXmlHoursLoadCursor IS (SELECT code, product FROM xml_hours_load); --You can add a WHERE condition to this cursor query
BEGIN
FOR v IN cXmlHoursLoadCursor LOOP
Cascade_Load(v.code, v.product);
COMMIT; --I recommend calling commit here instead of inside your stored procedure so that the calling code has control of the transaction state
END LOOP;
END;