Sei sulla pagina 1di 19

Interazioni con il Server Oracle

Obiettivi
Al completamento della lezione, dovreste essere in grado di:
o Scrivere comandi SELECT in PL/SQL o Dichiarare tipi e dimensioni di una

variabile PL/SQL dinamicamente o Scrivere comandi DML in PL/SQL o Controllare transazioni in PL/SQL o Determinare loutput di un comando SQL DML

Comandi SQL in PL/SQL


Estrarre una riga di dati con comandi SELECT. Solo un singolo insieme di valori pu essere restituito. Effettuare cambiamenti nel database con comandi DML. Controllare una transazione con i comandi COMMIT, ROLLBACK o SAVEPOINT. Determinare un output DML con luso di cursori impliciti.

SELECT in PL/SQL
Sintassi
SELECT select_list INTO {variable_name[, variable_name]... | record_name} FROM table WHERE condition;

SELECT in PL/SQL
La clausola INTO e richiesta. Esempio
DECLARE v_deptno NUMBER(2); v_loc VARCHAR2(15); BEGIN SELECT deptno, loc INTO v_deptno, v_loc FROM dept WHERE dname = 'SALES'; ... END;

Recuperare Dati in PL/SQL


Recuperare la data dellordine e la data di consegna per uno specifico ordine. Esempio
DECLARE v_orderdate ord.orderdate%TYPE; v_shipdate ord.shipdate%TYPE; BEGIN SELECT orderdate, shipdate INTO v_orderdate, v_shipdate FROM ord WHERE id = 620; ... END;

Recuperare Dati in PL/SQL


Restituire la somma dei salari per tutti gli impiegati di un dipartimento. Esempio
DECLARE v_sum_sal emp.sal%TYPE; v_deptno NUMBER NOT NULL := 10; BEGIN SELECT SUM(sal) -- group function INTO v_sum_sal FROM emp WHERE deptno = v_deptno; END;

Manipolare Dati con PL/SQL


Cambiamenti al database con comandi DML:
o INSERT o UPDATE o DELETE
INSERT

UPDATE

DELETE

Inserire Dati
Aggiungere un nuovo impiegato alla tabella impiegati. Esempio
BEGIN INSERT INTO emp(empno, ename, job, deptno) VALUES (empno_sequence.NEXTVAL, 'HARDING', 'CLERK', 10); END;

Aggiornare Dati
Incrementare lo stipendio agli analisti nella tabella EMP. Esempio
DECLARE v_sal_increase emp.sal%TYPE := 2000; BEGIN UPDATE emp SET sal = sal + v_sal_increase WHERE job = 'ANALYST'; END;

Cancellare Dati
Cancellare gli impiegati del dipartimento 10 nella tabella EMP. Esempio
DECLARE v_deptno emp.deptno%TYPE := 10; BEGIN DELETE FROM emp WHERE deptno = v_deptno; END;

Convenzioni sui nomi


Eliminare le ambiguit della clausola WHERE. identificatori e nomi colonna dovrebbero avere nomi differenti. Errori di sintassi possono essere causati dal fatto che PL/SQL controlla il database prima.

Convenzioni sui nomi


DECLARE orderdate ord.orderdate%TYPE; shipdate ord.shipdate%TYPE; ordid ord.ordid%TYPE := 601; BEGIN SELECT orderdate, shipdate INTO orderdate, shipdate FROM ord WHERE ordid = ordid; END; SQL> / DECLARE * ERROR at line 1: ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 6

COMMIT e ROLLBACK
La transazione inizia con il primo comando DML per essere poi completata da COMMIT o ROLLBACK. Usare i comandi COMMIT e ROLLBACK SQL per finire le transazioni in maniera esplicita.

Cursori SQL
Un cursore e una area di lavoro SQL privata. Due tipi di cursori:
o o

Impliciti Espliciti

Oracle usa cursori impliciti per fare il parsing ed eseguire comandi SQL. I cursori espliciti sono dichiarati dagli sviluppatori.

Cursori SQL: Attributi


Usare gli attributi dei cursori,per controllare loutput dei comandi SQL.
SQL%ROWCOUNT Numero di righe restituite dal comando piu recente (valore intero) SQL%FOUND Attributo Booleano che restituisce TRUE se il piu recente comando SQL ha restituito una o piu righe SQL%NOTFOUND Attributo Booleano che restituisce TRUE se il piu recente comando SQL non ha ha restituito righe SQL%ISOPEN Restituisce sempre FALSE perche PL/SQL chiude i cursori impliciti subito dopo la fine dellesecuzione

Cursori SQL: Attributi


Cancellare una riga che ha un numero particolare di ordine nella tabella ITEM. Visualizzare il numero della riga cancellata. Esempio
VARIABLE rows_deleted VARCHAR2(30) DECLARE v_ordid NUMBER := 605; BEGIN DELETE FROM item WHERE ordid = v_ordid; :rows_deleted := (SQL%ROWCOUNT || ' rows deleted.'); END; / PRINT rows_deleted

Sommario
Inserire SQL in blocchi PL/SQL : SELECT, INSERT, UPDATE, DELETE Inserire controlli sulle transazioni in blocchi PL/SQL: COMMIT, ROLLBACK, SAVEPOINT

Sommario
Ci sono due tipi di cursori espliciti e impliciti. I cursori impliciti verificano loutput di un comando DML:
o o o o

SQL%ROWCOUNT SQL%FOUND SQL%NOTFOUND SQL%ISOPEN

Espliciti sono definiti dal programmatore.