2012-09-04 10 views
5

पर कॉलटाइम पैरामीटर मान पुनर्प्राप्त करें मुझे प्रक्रिया को कॉल करते समय रनटाइम पैरामीटर (मान) की सूची प्राप्त करने के लिए एक सामान्यीकृत विधि की आवश्यकता होती है। मुझे $$ PLSQL_UNIT के समान कुछ चाहिए जो चल रही प्रक्रिया का नाम देता है। (plsql ओरेकल 10 जी)ऑरैक plsql: जब आप किसी प्रक्रिया को कॉल करते हैं तो

उदा। इस नमूने प्रक्रिया पर नज़र डालें:

SQL> 
    1 BEGIN 
    2  IBAD_OWN.MY_PROC('first_par', 'second_par'); 
    3 END; 
    4/

proc_name: MY_PROC parameters: first_par second_par 

PL/SQL procedure successfully completed. 

मैं संतुष्ट नहीं कर रहा हूँ मैं क्योंकि कॉपी नहीं कर सकते और:

CREATE OR REPLACE PROCEDURE MY_PROC(ow in varchar2, tn IN varchar2) 
IS 

BEGIN 
    dbms_output.put_line('proc_name: '||$$PLSQL_UNIT||' parameters: '|| ow||' '||tn ); 

    EXCEPTION 
    WHEN OTHERS THEN 
     DBMS_OUTPUT.PUT_LINE('ERRORE: ' ||SQLERRM); 

END MY_PROC; 
/

प्रक्रिया चल रहा है का उत्पादन निम्नलिखित निर्गम (यह बस अपने नाम और मानकों प्रिंट) मेरी सभी प्रक्रियाओं में पेस्ट करें क्योंकि मुझे अपने सही पैरामीटर चर सेट करने के लिए प्रत्येक प्रक्रिया को हार्ड कोड करना होगा।

सहायता के लिए अग्रिम धन्यवाद।

+1

http://stackoverflow.com/questions/12160928/get-a-parameters-name/ का संभावित डुप्लिकेट? – tbone

+0

हाँ, मुझे लगता है कि यह वही सवाल है। उत्तर के बिना दोनों :(मुझे लगता है कि पैरामीटर के मूल्य प्राप्त करने का कोई तरीका नहीं है :( – tortugone

+1

मुझे नहीं लगता कि यह वही प्रश्न है। आप इसका नाम जानने के बिना पैरामीटर के _value_ के लिए पूछ रहे हैं। एक में, अब हटाए गए, उत्तर और लिंक किए गए प्रश्न में पैरामीटर का नाम ढूंढना आसान है लेकिन उस पैरामीटर का मान नहीं है। – Ben

उत्तर

2

ओरेकल पीएल/एसक्यूएल में किसी प्रक्रिया में पारित पैरामीटर के मानों को गतिशील रूप से पुनर्प्राप्त करना संभव नहीं है। भाषा को इस तरह के ऑपरेशन को संभालने के लिए डिज़ाइन नहीं किया गया है।

संयोग से, एक पैकेज में स्थित एक प्रक्रिया में, $$PLSQL_UNIT केवल पैकेज का नाम वापस कर देगा। मुझे लगता है कि प्रत्येक प्रक्रिया के भीतर निरंतर नामित स्थिरता को परिभाषित करना बेहतर होता है जिसमें प्रक्रिया का नाम होता है।

1

जब मैं आपकी कार्यक्षमता चाहता था तो मुझे कोई अच्छा अंतर्निहित समाधान नहीं मिला।

मैंने जो किया वह है: डीबी-स्तरीय ट्रिगर लिखा जो कार्य/प्रक्रिया/पैकेज के मूल निकाय को संशोधित करता है। यह ट्रिगर "user_arguments" से कोड के गतिशील रूप से जेनरेट किए गए टुकड़े को "प्रारंभ" करने के तुरंत बाद जोड़ता है।

प्लस, उसके बाद मैं इस ट्रिगर को कोड में शामिल करता हूं, जो अपवाद होने पर प्रो की कॉल लॉग करता है।

प्लस, आप प्रोसेस कॉल का पता लगा सकते हैं, और कई और अधिक इंटरैस्टिंग चीजें।

लेकिन यह समाधान केवल प्रजनन के लिए ठीक काम करता है क्योंकि प्रदर्शन नाटकीय रूप से घटता है।

पीएस। मेरी खराब इंग्लिश के लिए माफ़ कीजिये।

+0

क्या आप अपना कोड पोस्ट कर सकते हैं? – Jesse

संबंधित मुद्दे

 संबंधित मुद्दे