किसी परिवर्तन को परिनियोजित करने के लिए एकल स्क्रिप्ट का होना असामान्य नहीं है। बात यह है कि, ऐसी स्क्रिप्ट को एक पावर उपयोगकर्ता द्वारा चलाने की आवश्यकता होती है, क्योंकि इसके लिए किसी भी स्तर पर सिस्टम विशेषाधिकारों की आवश्यकता होती है। इसका आमतौर पर एक डीबीए खाता होता है, अधिमानतः एक आवेदन खाता लेकिन अन्यथा सिस्टम या एसवाईएस।
तो आप जो स्क्रिप्ट चाहते हैं वह इस तरह दिखेगी:
grant select on user_a.t23 to user_b
/
grant select on user_a.t42 to user_b
/
create view user_b.v_69 as
select t23.col1, t42.col2
from user_a.t42
join user_a.t23
on (t42.id = t23.id)
/
grant select on user_b.v_69 to user_c
/
एक सामान्य परिदृश्य यह है कि हमारे पास अलग-अलग स्क्रिप्ट का एक सूट है जिसे अलग-अलग उपयोगकर्ताओं द्वारा चलाने के लिए लिखा गया है, लेकिन अब हमें एक ही परिनियोजन में बंडल करने की आवश्यकता है। मूल स्क्रिप्ट में स्कीमा नाम नहीं होते हैं, और कई अच्छे कारण हैं कि हम उन्हें स्क्रिप्ट में हार्डकोड क्यों नहीं करना चाहेंगे।
उस मास्टर स्क्रिप्ट को बनाने का एक तरीका CURRENT_SCHEMA सिंटैक्स को बदलना है:
alter session set current_schema=USER_A
/
@run_grants_to_userb.sql
alter session set current_schema=USER_B
/
@create_view69.sql
@run_grants_to_userc.sql
मास्टर स्क्रिप्ट चलाने के लिए हमें अभी भी एक डीबीए उपयोगकर्ता की आवश्यकता है। वर्तमान स्कीमा को बदलने का एक फायदा यह है कि यह हमें डेटाबेस लिंक जैसी वस्तुओं को तैनात करने की अनुमति देता है, जो कि सिंटैक्स के एक क्विक के माध्यम से उनकी घोषणा में स्कीमा नाम नहीं हो सकता है। एक गोचा यह है कि उपयोगकर्ता नहीं बदलता है, इसलिए एक स्क्रिप्ट जो USER छद्म-स्तंभ को नियोजित करती है, अवांछित परिणाम उत्पन्न कर सकती है।