Non è insolito desiderare un singolo script per distribuire una modifica. Il fatto è che uno script di questo tipo deve essere eseguito da un utente esperto, perché deve avere i privilegi di sistema a QUALSIASI livello. Questo di solito significa un account DBA, preferibilmente un account di applicazione ma altrimenti SYSTEM o SYS.
Quindi lo script che si desidera sarebbe simile a questa:
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
/
Uno scenario comune è che abbiamo una serie di singoli script che sono state scritte per essere eseguito da diversi utenti, ma che ora abbiamo bisogno di impacchettare fino a una singola implementazione. Gli script originali non contengono i nomi degli schemi e ci sono molte buone ragioni per cui non vorremmo hardcode negli script.
Un modo per costruire lo script maestro è quello di utilizzare modificare la sintassi 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
Abbiamo ancora bisogno di un utente DBA per eseguire lo script master. Un vantaggio del passaggio allo schema corrente è che ci consente di distribuire oggetti come i collegamenti ai database, che attraverso una stranezza della sintassi non possono avere il nome dello schema nella loro dichiarazione. Un trucco è che l'utente non cambia, quindi uno script che impiega la pseudo colonna USER può produrre risultati indesiderati.
Non ha senso: gli script non esistono in uno schema, sono solo un elenco di comandi che l'utente che si collega all'istanza ha il privilegio di eseguire. Le dichiarazioni di sovvenzione IIRC sono per oggetto (IE: tabella). Si prega di riformulare la domanda in modo che sia più chiaro di cosa stai chiedendo. –