के भीतर से एक पीएल/एसक्यूएल फ़ंक्शन की स्कीमा कैसे निर्धारित करें मेरे पास ओरेकल 10 जी डेटाबेस में एक पीएल/एसक्यूएल पैकेज है और मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो पैकेज के स्कीमा का नाम लौटाता है (और इसलिए फ़ंक्शन) में परिभाषित किया गया है। किसी को भी यह कैसे करना है?फ़ंक्शन
फ़ंक्शन
उत्तर
create function xcurr return varchar2 is
v_curr varchar2(32);
begin
SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') into v_curr from dual;
return v_curr;
end;
यह तब तक काम करेगा जब तक पीएल/एसक्यूएल ऑब्जेक्ट में AUTHID CURRENT_USER नहीं है।
शायद एक आसान तरीका है लेकिन आप dbms_utility.format_call_stack
का उपयोग कर सकते हैं और स्कीमा नाम प्राप्त करने के लिए परिणामों का विश्लेषण कर सकते हैं। यह ओरेकल 9i में काम करता है।
ओरेकल 11 त्रुटि संदेश में उपयोगकर्ता को नहीं दिखाता है। – Victor
ओरेकल 10 जी CURRENT_USER से, जैसा कि Gary Myers' answer में उपयोग किया गया है, को बहिष्कृत किया गया है। ओरेकल अनुशंसा करता है कि आप इसके बजाय SESSION_USER पैरामीटर का उपयोग करें, जो:
उद्यम उपयोगकर्ताओं के लिए, स्कीमा लौटाता है। अन्य उपयोगकर्ताओं के लिए, डेटाबेस उपयोगकर्ता नाम देता है जिसके द्वारा वर्तमान उपयोगकर्ता प्रमाणीकृत है। यह मान सत्र की अवधि के दौरान समान रहता है।
मैं CURRENT_SCHEMA का उपयोग करूंगा। ALTER SESSION SET CURRENT_SCHEMA
कथन जारी होने पर CURRENT_SCHEMA परिवर्तनों के रूप में दोनों के बीच सूक्ष्म मतभेद हैं।
दोहरी से चयन करने की कोई आवश्यकता नहीं है; आप सीधे चर के लिए SYS_CONTEXT का वापसी मान असाइन कर सकते हैं।
DECLARE
v_current_schema varchar2(30);
BEGIN
v_current_schema := SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA');
dbms_output.put_line('I am using the schema [' || v_current_schema || ']');
END;
यह बहुत अलग नहीं है, लेकिन कुछ अलग कारण हैं जिन्हें मुझे अन्य उत्तर पसंद नहीं है। 1. आपको दोहरी से एक चर में चयन करने की आवश्यकता नहीं है, बस इसे असाइन करें। 2. CURRENT_USER [बहिष्कृत] है (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm)। 3. CURRENT_SCHEMA और SESSION_USER के बीच मामूली अभी तक भिन्न अंतर हैं। –
पर्याप्त मेला @ टॉम। मुझे पता नहीं था। मैंने यह सब जवाब देने के लिए अपना उत्तर अपडेट कर दिया है। कृपया एक नज़र डालें और देखें कि क्या कुछ भी आप बदलना चाहते हैं। – Ben
- 1. सदस्य फ़ंक्शन छुपाएं फ़ंक्शन
- 2. फ़ंक्शन (नेस्टेड फ़ंक्शन?)
- 3. फ़ंक्शन
- 4. फ़ंक्शन
- 5. फ़ंक्शन
- 6. फ़ंक्शन
- 7. == फ़ंक्शन
- 8. फ़ंक्शन
- 9. फ़ंक्शन
- 10. फ़ंक्शन
- 11. फ़ंक्शन
- 12. फ़ंक्शन
- 13. फ़ंक्शन
- 14. फ़ंक्शन
- 15. फ़ंक्शन
- 16. फ़ंक्शन
- 17. फ़ंक्शन
- 18. फ़ंक्शन
- 19. फ़ंक्शन
- 20. फ़ंक्शन
- 21. फ़ंक्शन
- 22. फ़ंक्शन
- 23. फ़ंक्शन
- 24. फ़ंक्शन
- 25. फ़ंक्शन
- 26. फ़ंक्शन
- 27. फ़ंक्शन के भीतर फ़ंक्शन TSQL
- 28. आंतरिक फ़ंक्शन बाहरी फ़ंक्शन वैरिएबल
- 29. क्लोजर में, फ़ंक्शन, उद्धृत फ़ंक्शन और तेज-कोट फ़ंक्शन
- 30. std :: for_each (से, से, फ़ंक्शन) फ़ंक्शन फ़ंक्शन क्यों करता है?
वाह। मैं इसके बारे में जानता था, लेकिन उम्मीद है कि यह वर्तमान उपयोगकर्ता को वापस करने की उम्मीद है, न कि उस उपयोगकर्ता को जिस पर फ़ंक्शन चल रहा था। धन्यवाद! –