जैसा कि अमारिलो ने कहा था कि आप स्थानीय रूप से परिभाषित प्रक्रिया को गतिशील रूप से निष्पादित नहीं कर सकते हैं, क्योंकि यह SQL दायरे में मौजूद नहीं है जो गतिशील अनुभाग उपयोग करेगा।
आपके द्वारा वर्णित स्थिति यह है कि सभी प्रक्रियाओं को अनाम ब्लॉक के DECLARE
. में परिभाषित किया गया है अनुभाग और आप एक क्वेरी चला रहे हैं जो आपको बताती है कि उनमें से किसे निष्पादित करना है - और संभवतः जो आपको पास करने के लिए तर्क भी देता है। आप बस एक if
. का उपयोग कर सकते हैं /else
निर्माण या case
उपयुक्त प्रक्रियाओं को निष्पादित करने के लिए कथन, कुछ इस तरह:
DECLARE
...
BEGIN
FOR data IN (SELECT procname, arg1, arg2, ... from <your_query>) LOOP
CASE data.procname
WHEN 'OPENLOG' THEN
openlog(data.arg1);
WHEN 'WRITELOG' THEN
writelog(data.arg1, data.arg2);
WHEN ...
...
ELSE
-- handle/report an invalid procedure name
-- or skip the `ELSE` and let CASE_NOT_FOUND be thrown
END CASE;
END LOOP;
END;
/
आपको बस एक WHEN
की जरूरत है प्रत्येक प्रक्रिया के लिए शर्त और उपयुक्त प्रक्रिया कॉल। आपके पास ELSE
भी हो सकता है किसी भी अनपेक्षित प्रक्रिया नाम को पकड़ने के लिए या CASE_NOT_FOUND
अपवाद (ORA-06592) फेंक दिया जाएगा, जो इस बात पर निर्भर करता है कि यदि ऐसा होता है तो आपको क्या करना होगा।