OCA Oracle 10g - Programmare in PL/SQL Distribuito tramite il sito www.manualioracle.it Copyright © 2011 Assi Loris Qualsiasi abuso sarà perseguito e punito secondo i termini di legge. Version: 1.3.5 Questo non è un documento ufficiale della Oracle Corporation. Alcuni termini usati sono trademarks registrati dei rispettivi proprietari. Oracle 10g – OCA Programmare in PL/SQL Sommario Introduzione al Manuale ........................................................................................................................................ 4 Cap. 1 Introduzione ad Oracle, all’SQL e al PL/SQL .................................................................................. 5 Cap. 2 Introduzione ai PL/SQL Programs ................................................................................................... 6 2.1 Il PL/SQL Program Construct ........................................................................................................................ 6 2.2 I componenti di un PL/SQL block................................................................. Error! Bookmark not defined. 2.3 I benefits dei subprograms ............................................................................ Error! Bookmark not defined. 2.4 Come invocare una Procedura o Funzione .................................................... Error! Bookmark not defined. Cap. 3 Creare le Procedure ............................................................................................................................ 7 3.1 Cosa è una stored procedure ........................................................................................................................... 7 3.2 Creare e droppare una procedura .............................................................. Error! Bookmark not defined. 3.3 Formal and Actual Parameters ...................................................................... Error! Bookmark not defined. 3.4 Procedure con Parametri e i tipi di parameter modes .................................... Error! Bookmark not defined. 3.5 Invocare una procedura con parametri .......................................................... Error! Bookmark not defined. 3.6 Il subprogram nella declarative section di una Procedura ............................. Error! Bookmark not defined. 3.7 Come le Exception sono propagate ............................................................... Error! Bookmark not defined. Cap. 4 Creare le Funzioni ............................................................................................................................... 8 4.1 Cosa è una stored function ............................................................................................................................. 8 4.2 Creare, Invocare e rimuovere una Funzione .................................................. Error! Bookmark not defined. 4.3 Vantaggi e restrizioni delle chiamate dagli SQL statement ........................... Error! Bookmark not defined. 4.4 Dove le funzioni vengono chiamate negli SQL statement ............................ Error! Bookmark not defined. 4.5 Differenze fra procedure e funzioni .............................................................. Error! Bookmark not defined. Cap. 5 Gestire i Subprograms ........................................................................... Error! Bookmark not defined. 5.1 System Privileges, Object Privileges e Grant Privileges ............................... Error! Bookmark not defined. 5.2 Differenze fra Invokers Rights e Definers Rights ......................................... Error! Bookmark not defined. 5.3 Le viste di dizionario per gestire gli stored objects ....................................... Error! Bookmark not defined. Cap. 6 Creare i Package ..................................................................................... Error! Bookmark not defined. 6.1 Creare e Droppare Packages........................................................................... Error! Bookmark not defined. 6.2 Identificare un Package specification e un Package body ............................. Error! Bookmark not defined. 6.3 Usare la DESCRIBE per descrivere i package e i suoi componenti .............. Error! Bookmark not defined. 6.4 Disegnare un package construct come public o private ................................. Error! Bookmark not defined. 6.5 Invocare un package construct ...................................................................... Error! Bookmark not defined. 6.6 Usare un bodiless package ............................................................................ Error! Bookmark not defined. 6.7 I benefits dei Package .................................................................................... Error! Bookmark not defined. Cap. 7 Altri Concetti relativi ai Package .......................................................... Error! Bookmark not defined. 7.1 Package che usano l’overloading .................................................................. Error! Bookmark not defined. 7.2 Usare la Forward Referencing ....................................................................... Error! Bookmark not defined. 7.3 Inizializzare variabili con una one-time-only procedure ............................... Error! Bookmark not defined. 7.4 Invocare le packaged function dagli SQL ..................................................... Error! Bookmark not defined. 7.5 Usare le PL/SQL tables e i records nei Package ........................................... Error! Bookmark not defined. Cap. 8 Oracle Supplied Packages ...................................................................... Error! Bookmark not defined. 8.1 Native Dynamic SQL: i benefits dell’Execute Immediate rispetto al DBMS_SQL .... Error! Bookmark not defined. 8.2 Identificare il flusso dell’esecuzione ............................................................. Error! Bookmark not defined. 8.3 Uso e applicazione di alcuni Oracle supplied Packages ................................ Error! Bookmark not defined. Cap. 9 Gestire i Large Objects (LOBs) ............................................................. Error! Bookmark not defined. 9.1 Comparare i LONG con i Large Object (LOB) data type ............................. Error! Bookmark not defined. 9.2 Creare e gestire i LOB data type ................................................................... Error! Bookmark not defined. 9.3 Differenze fra Internal ed External LOBs ...................................................... Error! Bookmark not defined. 9.4 Identificare e Gestire i BFiles ........................................................................ Error! Bookmark not defined. 9.5 Migrare da LONG a LOB ............................................................................. Error! Bookmark not defined. 9.6 Usare il package DBMS_LOB ....................................................................... Error! Bookmark not defined. 9.7 Creare e popolare i LOB columns ................................................................. Error! Bookmark not defined. 9.8 Fare le SQL operations nei LOBS ................................................................. Error! Bookmark not defined. 9.9 Descrivere l’uso dei temporary LOBs ............................................................ Error! Bookmark not defined. Cap. 10 Creare i db Trigger............................................................................ Error! Bookmark not defined. 10.1 Definizione di trigger e Tipi di trigger ........................................................ Error! Bookmark not defined. 10.2 Linee Guida per progettare i trigger ............................................................ Error! Bookmark not defined. 10.3 Creare un DML trigger ................................................................................ Error! Bookmark not defined. 2 www.manualioracle.it Oracle 10g – OCA Programmare in PL/SQL 10.4 I componenti del DML trigger .................................................................... Error! Bookmark not defined. 10.5 I trigger row level, statement level e la loro firing sequence ....................... Error! Bookmark not defined. 10.6 I conditional predicated in un trigger .......................................................... Error! Bookmark not defined. 10.7 Usare i qualifiers OLD e NEW in un DML Trigger .................................... Error! Bookmark not defined. 10.8 Creare un INSTEAD OF trigger.................................................................. Error! Bookmark not defined. 10.9 Differenze fra stored procedures e trigger .................................................... Error! Bookmark not defined. 10.10 Il trigger execution model ......................................................................... Error! Bookmark not defined. 10.11 Cambiare un trigger status ......................................................................... Error! Bookmark not defined. 10.12 Rimuovere un trigger ................................................................................. Error! Bookmark not defined. Cap. 11 Altri Concetti relativi ai Trigger ...................................................... Error! Bookmark not defined. 11.1 Eventi che fanno scattare il DB trigger ....................................................... Error! Bookmark not defined. 11.2 Creare un trigger per un DDL statement ...................................................... Error! Bookmark not defined. 11.3 Creare un trigger per un system event ......................................................... Error! Bookmark not defined. 11.4 Descrivere la funzionalità del CALL statement .......................................... Error! Bookmark not defined. 11.5 La mutating table ......................................................................................... Error! Bookmark not defined. 11.6 Per cosa possono essere implementati i trigger ........................................... Error! Bookmark not defined. 11.7 I privilegi associati ai trigger ....................................................................... Error! Bookmark not defined. 11.8 Le trigger information nelle dictionary views .............................................. Error! Bookmark not defined. Cap. 12 Gestire le Dipendenze ........................................................................ Error! Bookmark not defined. 12.1 Tracciare le dipendenze procedurali ............................................................ Error! Bookmark not defined. 12.2 Descrivere gli oggetti dipendenti e gli oggetti referenziati.......................... Error! Bookmark not defined. 12.3 Definire le local dependencies ..................................................................... Error! Bookmark not defined. 12.4 Le view dependency information nelle dictionary views ............................ Error! Bookmark not defined. 12.5 Lo script UTLDTREE.sql e le procedure IDEPTREE e DEPTREE ......... Error! Bookmark not defined. 12.6 Descrivere una remote dependency ............................................................. Error! Bookmark not defined. 12.7 Listare come vengono gestite le remote dependencies ................................ Error! Bookmark not defined. 12.8 Ricompilazione di una Program Unit con e senza successo ........................ Error! Bookmark not defined. 12.9 Come minimizzare le dependency failures .................................................. Error! Bookmark not defined. www.manualioracle.it 3 Oracle 10g – OCA Programmare in PL/SQL Introduzione al Manuale Contenuto Il presente manuale tratta quasi tutti gli argomenti della certificazione Oracle “Oracle 10g: Program with PL/SQL” (1Z0-147). Audience Il presente manuale è rivolto a chiunque voglia imparare le basi del linguaggio PL/SQL e le informazioni qui contenute sono molto simili in ogni versione Oracle. Particolarità Il presente manuale è in italiano ma molti termini tecnici in esso contenuti sono in lingua inglese. Abbiamo fatto tale scelta perché spesso a lavoro tali termini vengono detti in inglese e perché riteniamo più utile che i lettori del manuale conoscano tali termini nella lingua usata nella documentazione ufficiale Oracle. Molti argomenti sono schematizzati al fine di fornire una comprensione ed una memorizzazione superiore. Principali Versioni - 29.06.2011 : version 1.0 - 30.06.2011 : version 1.1 varie modifiche e rilascio al pubblico Disclaimer Non si fornisce alcuna garanzia relativamente al fatto che il presente documento sia privo di errori. Non si assume nessuna responsabilità sugli eventuali errori o danni derivanti dall’uso delle informazioni qui contenute. 4 www.manualioracle.it Oracle 10g – OCA Programmare in PL/SQL Cap. 1 - Introduzione ad Oracle, all’SQL e al PL/SQL Questo manuale si focalizzerà sul linguaggio PL/SQL. Tuttavia, riteniamo utile fare una premessa sull’ambiente in cui si utilizza tale linguaggio e dunque qui forniamo una breve definizione dei concetti più importanti. DBMS (Database Management System) Software progettato per creare e manipolare in modo efficiente un database (ovvero un insieme di dati strutturati) solitamente da parte di più utenti. Fra i DBMS più diffusi c’è l’Oracle database, prodotto dalla società americana Oracle Corporation. RDBMS (Relational Database Management System) Come si evince dal suo nome in inglese, è un sistema di gestione del database basato sul modello relazionale. Il modello relazionale è un modello logico di rappresentazione dei dati. Secondo tale modello, qualsiasi dato può essere rappresentato come relazione. E tale relazione può essere rappresentata graficamente tramite una tabella. Oracle Server E’ costituito da 2 principali componenti: - Il database: è una raccolta di dati correlati. Ha una struttura logica (tabelle, indici, ecc...) e una fisica (i file in cui sono immagazzinati i dati) - L’istanza: è costituita da una struttura di memoria e dai processi in background che gestiscono il db Normalmente ogni db ha una singola istanza associata. A volte c’è più di una istanza associata ad un singolo db e in questo caso di parla di Oracle Real Application Clusters (RAC). SQL*Plus ………… ………… ………… www.manualioracle.it 5 Oracle 10g – OCA Programmare in PL/SQL Cap. 2 - Introduzione ai PL/SQL Programs 2.1 Il PL/SQL Program Construct Il construtto base del PL/SQL è il cosiddetto blocco PL/SQL. Esso è strutturato così: DECLARE -- facoltativo -- dichiarazioni delle variabili … BEGIN -- obbligatorio -- comandi di esecuzione … EXCEPTION -- facoltativo -- gestione delle eccezioni … END; Nel prossimo paragrafo descriveremo nel dettaglio questi 3 componenti. ………… ………… ………… 6 www.manualioracle.it Oracle 10g – OCA Programmare in PL/SQL Cap. 3 - Creare le Procedure 3.1 Cosa è una stored procedure Una stored procedure è uno stored PL/SQL subprogram e dunque fornisce: - modularità (modularity) - possibilità di essere riutilizzata (reusability) Una procedura non è invocata come una funzione perché generalmente non ritorna un valore. Per chiamare una procedura, usi l’EXECUTE statement e un valore può essere ritornato a seconda del mode dei parametri: se hai parametri con mode OUT o IN OUT allora la procedura ritornerà un valore. Una procedura può essere chiamata in vari modi: 1) tramite l’EXECUTE command: esso può essere usato in SQL*Plus così: SQL> EXECUTE my_procedure O anche: SQL> EXEC my_procedure ………… ………… ………… www.manualioracle.it 7 Oracle 10g – OCA Programmare in PL/SQL Cap. 4 - Creare le Funzioni 4.1 Cosa è una stored function Una stored function è uno stored PL/SQL subprogram e dunque fornisce: - modularità (modularity) - possibilità di essere riutilizzata (reusability). Una funzione ha questi componenti: - l’header, incluso la RETURN clause e la keyword IS o AS - il body della funzione - opzionalmente, puoi anche includere le local declarations (dopo l’header) e una exception-handling section (dopo l’executable section). Es: CREATE OR REPLACE FUNCTION fz_calc (in_old_salary IN NUMBER) RETURN NUMBER IS v_new_salary NUMBER; BEGIN v_new_salary:= in_old_salary+100; RETURN v_new_salary; END; ………… ………… ………… 8 www.manualioracle.it