Není neobvyklé chtít mít jeden skript pro nasazení změny. Jde o to, že takový skript musí spouštět zkušený uživatel, protože musí mít systémová oprávnění na JAKÉKOLI úrovni. Obvykle to znamená účet DBA, nejlépe účet aplikace, ale jinak SYSTEM nebo SYS.
Požadovaný skript by tedy vypadal takto:
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
/
Běžným scénářem je, že máme sadu jednotlivých skriptů, které byly napsány tak, aby je spouštěli různí uživatelé, ale které nyní potřebujeme sloučit do jednoho nasazení. Původní skripty neobsahují názvy schémat a existuje mnoho dobrých důvodů, proč bychom je nechtěli pevně zakódovat do skriptů.
Jedním ze způsobů, jak vytvořit tento hlavní skript, je použít změnit syntaxi 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
Pro spuštění hlavního skriptu stále potřebujeme uživatele DBA. Jednou z výhod přepínání aktuálního schématu je to, že nám umožňuje nasadit objekty, jako jsou databázové odkazy, které prostřednictvím vtipu syntaxe nemohou mít ve své deklaraci název schématu. Jednou nevýhodou je, že uživatel se nemění, takže skript, který využívá pseudosloupec USER, může způsobit nežádoucí výsledky.