====== Rilascio SQL ======
===== Privilegi =====
Spesso accade che l'utente usato per eseguire stored procedures e statements SQL non coincida con l'utente a cui essi appartengono.
Per far si che tutto funzioni è necessario conferire all'utente di esecuzione i diritti su tali oggetti.
Questa operazione si ottiene con il comando **GRANT**.
\\ Tale comando assume sintassi differenti al variare dell'oggetto cui si riferisce.
Tutte le operazioni seguenti devono essere fatte dall'utente proprietario dell'oggetto o da un utente amministratore.
\\ (Quello che segue è solo un promemoria, i parametri del comando variano al variare delle esigenze)
Per Procedure, Function, Packages è possibile attribuire solo il privilegio di esecuzione.
Grant Execute on to ;
\\ Per le Sequence è possibile attribuire il privilegio di esecuzione,
Grant Select on to ;
\\ ed in casi più rari quello di modifica
Grant Alter on to ;
\\ Per le View solitamente si danno i privilegi di lettura
Grant SELECT, QUERY REWRITE, FLASHBACK on to ;
\\ ma se la view è aggiornabile è necessario dare anche quelli di editing
Grant DELETE, INSERT, UPDATE on to ;
\\ Per le Table solitamente si danno i privilegi di lettura e di editing
Grant SELECT, QUERY REWRITE, FLASHBACK on to ;
Grant DELETE, INSERT, UPDATE, ON COMMIT REFRESH on to ;
\\ Questi comandi devono essere inclusi nell'eventuale script di creazione dell'oggetto.
===== Sinonimi =====
Un **sinonimo** è un nome alternativo per un qualsiasi oggetto del database.
==== Creazione ====
La sintassi è:
create [or replace] [public] synonym [schema.]synonym_name for [schema.]object_name[@dblink];
* **Or Replace** -- Permette di sostituire un sinonimo senza doverlo prima distruggere con un comando DROP
* **Public** -- Rende il sinonimo visibile a tutti gli utenti (schema)
* **Schema** -- Indica lo schema, se omesso è quello corrente
* **Object_Name** -- Il nome dell'oggetto per cui creare il sinonimo. L'oggetto può essere dei seguentri tipo:
* Tabelle
* Viste
* Sequenze
* Procedure
* Funzioni
* Package
* Sinonimi
* Classi Java
* Oggetti defini dall'utente
**Esempio:**
create public synonym connessioni for applic.connessioni;
==== Cancellazione ====
Per cancellare un sinonimo si usa il comando Drop.
drop [public] synonym [schema.]synonym_name [force];
* **Public** -- Consente di cancellare un sinonimo pubblico
* **Force** -- Forza la cancellazione del sinonimo anche se in uso. Gli oggetti che ne facevano uso rimarranno invalidi.
**Esempio:**
drop public synonym connessioni force;
===== Scripts =====
Uno script è un insieme di comandi SQL e non che può essere eseguito da strumenti evoluti come il TOAD ma anche dal programma SqlPlus fornito con Oracle.
==== Comandi Particolari ====
In uno script posso attivare la tracciatura dell'output ed il nome del file di log in cui salvarla. \\ Per fare ciò si usa il coamndo **Spool**
Spool ;
Spool Off;
\\ Un altro comando utile è **Prompt** che permette di inviare una stringa nel file di log
Prompt "Testo da inviare al file";
\\ Poiché all'interno di uno script non possono essere presenti blocchi **Begin**..**End**, l'eventuale esecuzione di una procedura deve avvenire tramite il comando **Execute**
Execute ;
\\ E'utile per quando deve essere lanciata una eventuale procedura di ricompilazione degli oggetti invalidi.
\\ All'interno di uno script possono essere invocati altri script mediante l'operatore **@**
@;
\\
=== Esempio ===
Spool Script_Di_Prova.log
prompt "Questo è uno script di prova"
prompt "Alter table MYTABLE..."
Alter Table MYTABLE Add MYCOLUMN Char(2);
prompt "Compila Oggetti Invalidi..."
Execute CompilaInvalidi;
prompt "Compila package PK_MYPACKAGE"
@PK_MYPACKAGE.pks
@PK_MYPACKAGE.pkb
prompt "Compila Oggetti Invalidi..."
Execute CompilaInvalidi;
prompt "Aggiorna MYTABLE"
Update MYTABLE
Set MYCOLUMN = '**';
COMMIT;
prompt "Fine Script"
Spool off;
**Non è** possibile usare blocchi **''Begin End''** in uno script.
==== SqlPlus ====
Aprire SqlPlus:
sqlplus /@tnsalias
Eseguire lo script ed uscire:
@nome_del_file.sql
exit
Per avere un log dell'esecuzione:
@nome_del_file.sql
spool off
exit