Sei sulla pagina 1di 17

Scrivere comandi eseguibili

Obiettivi
Al completamento della lezione, dovreste essere in grado di:
o Scrivere

comandi nella sezione eseguibile o Descrivere regole per blocchi annidati o Eseguire e testare blocchi PL/SQL o Usare codici di convenzione

Sintassi blocchi PL/SQL


I comandi si distribuiscono su diverse righe Unita Lessicali possono essere separate da:
o o o o o

Spazi Delimitatori Identificatori Letterali Commenti

Sintassi Blocchi PL/SQL


Identificatori
o Possono contenere fino a 30 caratteri o Non possono contenere parole chiave

a meno che siano comprese tra virgolette o Devono iniziare con un carattere alfabetico o Dovrebbero avere un nome differente dalle colonne delle tabelle del db

Sintassi Blocchi PL/SQL


Letterali
o

Stringhe e date devono essere incluse tra apici.

Numeri possono avere valori semplici o v_ename := 'Henderson'; scientifici.


o

Un blocco A PL/SQL termina con slash ( / ) sulla stessa linea.

Commentare il codice
Prefissare le linee singole con due trattini (-). Commenti multi colonna /* e */.

Esempio

... v_sal NUMBER (9,2); BEGIN /* Compute the annual salary based on the monthly salary input from the user */ v_sal := &p_monthly_sal * 12; END; -- This is the end of the block

Funzioni SQL in PL/SQL


Disponibili nei comandi procedurali:
o o o o

Numeri Single-row caratteri Single-row Conversione di tipi Date

Non disponibili nei comandi procedurali:


o o

DECODE Funzioni di raggruppamento

Come in SQL

Funzioni PL/SQL
Esempi
o Costruire

una mailing list:

v_mailing_address := v_name||CHR(10)|| v_address||CHR(10)||v_state|| CHR(10)||v_zip;

Convertire nomi impiegati in minuscolo.


v_ename := LOWER(v_ename);

Conversioni di tipo
Conversione di tipi confrontabili. Tipi misti possono essere causati da un errore ed influenzare le performance. Funzioni di conversione :
o o o

TO_CHAR TO_DATE TO_NUMBER

DECLARE v_date VARCHAR2(15); BEGIN SELECT TO_CHAR(hiredate, 'MON. DD, YYYY') INTO v_date FROM emp WHERE empno = 7839; END;

Conversione di Tipi
Questo comando produce un errore di compilazione se la variabile v_date e dichiarata come tipo DATE.
v_date := 'January 13, 1998';

Per correggere lerrore usare la funzione TO_DATE.


v_date := TO_DATE ('January 13, 1998', 'Month DD, YYYY');

Blocchi annidati e scope delle variabili


I comandi possono essere annidati in tutti i comandi che lo consentono. Un blocco annidato diventa un comando. Una sezione di eccezioni puo contenere blocchi annidati. Lo scope di un oggetto e la regione di programma che si riferisce alloggetto.

Blocchi annidati e scope delle variabili


Un identificatore e visibile nelle regioni in cui lo si puo riferire come oggetto non qualificato:
o Un

blocco non puo cercare nei blocchi che include (figli). o Puo cercare nei blocchi che lo includono.

Blocchi annidati e scope delle variabili


Example
... x BINARY_INTEGER; BEGIN ... DECLARE y NUMBER; BEGIN ... END; ... END;
Scope of x

Scope of y

Operatori in PL/SQL
Logici Aritmetici Concatenazione Come in Parentesi per controllare lordine delle SQL operazioni operatore di esponenziazione (**)

Operatori in PL/SQL
Esempi
o Incrementare
v_count := v_count + 1;

il contatore in un ciclo.

o Settare

un valore come flag Booleano.

v_equal := (v_n1 = v_n2);

o Validare

il numero di un impiegato se contiene un valore.

v_valid := (v_empno IS NOT NULL);

Uso di variabili Bind


Per riferirsi ad una variabile bind in PL/SQL, bisogna mettere (:) prima del nome. Esempio
VARIABLE g_salary NUMBER DECLARE v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE empno = 7369; :g_salary := v_sal; END; /

Sommario
Struttura Blocco PL/SQL: Blocchi annidati e regole di scoping Programmazione PL/SQL :
o o o o

Funzioni Conversione di tipi Operatori Variabili Bind

DECLARE BEGIN EXCEPTION END;