1
PL/SQL
2
Cos’è PL/SQL?
Il linguaggio procedurale per l’estensione del
linguaggio SQL di proprietà di Oracle
Lo standard SQL è esteso dai principali sistemi
commerciali:
Da Oracle con PL/SQL (e Java)
Da Access con Visual Basic
Da SQL Server con Transact-SQL
2
3
Il motore di PL/SQL I
Esegue le porzioni procedurali del codice ma invia al
server oracle i comandi SQL
4
Il motore di PL/SQL II
Può essere posizionato sia sul lato client, sia sul lato
server
Molti tool Oracle (es: Oracle Forms, Oracle Reports) dispongono di
un proprio motore PL/SQL
Server-side
I blocchi PL/SQL sono processati dal motore PL/SQL che fa parte del
Server Oracle
Client-side
Il motore PL/SQL filtra i comandi SQL e li invia SQL al server Oracle
mentre esegue direttamente i comandi procedurali.
ATTENZIONE: SQL*Plus non è dotato di un proprio
motore PL/SQL
3
5
Blocchi PL/SQL
I blocchi PL/SQL (Block)
Rappresentano l’unità elementare di codice PL/SQL
Normalmente contengono i comandi sufficienti a eseguire uno
specifico compito
Esistono due tipi di blocchi PL/SQL
anonymous
Named: Si tratta di blocchi PL/SQL precompilati che vengono
memorizzati nel database
stored procedure
function
trigger
package
6
Struttura di un blocco PL/SQL
Sezione di dichiarazione
Per dichiarare, variabili, costanti, cursori,ecc.
E’ opzionale
Sezione di esecuzione
Descrive la logica dei comandi
Può contenere istruzioni SQL
E’ obbligatoria
Sezione di gestione delle eccezioni
Viene eseguita quando si presentano degli errori
E’ opzionale
Attenzione nella definizione delle procedure e
funzioni la clausola DECLARE è implicita
DECLARE
DECLARE
BEGIN
BEGIN
EXCEPTION
EXCEPTION
END;
END;
4
7
Procedure I
Una procedura è un blocco di codice PL/SQL dotato
di un nome che viene mantenuto all’interno del
database (stored procedure)
La clausola IS sostituisce la clausola DECLARE
CREATE PROCEDURE nome_procedura [(parametri)] IS
Definizioni;
BEGIN
Corpo procedura;
END;
CREATE PROCEDURE nome_procedura [(parametri)] IS
Definizioni;
BEGIN
Corpo procedura;
END;
8
Procedure II
Una procedura può essere richiamata utilizzando il comando
call
Parametri è una sequenza di
che specifica eventuali valori passati in input
TIPO_DATO
TIPO_DATO
non deve specificare lunghezza, precisione o
non deve specificare lunghezza, precisione o
scala.
scala.
VARCHAR2(10) non è un tipo di dato valido VARCHAR2 si!
Oracle deriva lunghezza, precisione o scala degli argomenti
dall’ambiente da cui la procedura è chiamataled.
Nome_variabile TIPO_DATO
Nome_variabile TIPO_DATO
CALL nome_procedura([parametri]);
CALL nome_procedura([parametri]);
5
9
Funzioni
Le funzioni sono del tutto simili a procedure a meno
della clausola RETURN che specifica il tipo di tato
restituito
CREATE FUNCTION nome_funzione … RETURN BOOLEAN IS
Definizioni;
BEGIN
Corpo procedura;
RETURN Variabile;
END;
CREATE FUNCTION nome_funzione … RETURN BOOLEAN IS
Definizioni;
BEGIN
Corpo procedura;
RETURN Variabile;
END;
10
Esempio: anonymous
DECLARE
qty_on_hand NUMBER(5);
BEGIN
SELECT quantity INTO qty_on_hand
FROM inventory
WHERE product = 'TENNIS RACKET' FOR UPDATE OF quantity;
IF qty_on_hand > 0 THEN -- check quantity
UPDATE inventory SET quantity = quantity – 1
WHERE product = 'TENNIS RACKET';
INSERT INTO purchase_record
VALUES ('Tennis racket purchased', SYSDATE);
ELSE
INSERT INTO purchase_record
VALUES ('Out of tennis rackets', SYSDATE);
END IF;
COMMIT;
END;