====== 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