Esiste un metodo di programmazione in Oracle molto utile qualora si voglia creare una query dinamicamente e inserirne il risultato in una collection. Vediamo subito un esempio:
/*
Test Script
Author: Luca Favaretto
Create: 17 Jul 2009
Copyright: www.lucafavaretto.it
*/
DECLARE
TYPE ty_lista_id IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
v_id_coll ty_lista_id;
strSQL VARCHAR2(1000);
i INTEGER;
p_ricerca VARCHAR2(20):='ROSSI';
BEGIN
/*Mi servono gli id del personale che ha il cognome ROSSI*/
strSQL := ' ';
strSQL := strSQL|| ' SELECT V.ID';
strSQL := strSQL|| ' FROM HR.STIPENDI V ';
IF (p_ricerca = 'ROSSI') THEN
strSQL := strSQL|| ' WHERE V.COGNOME = "ROSSI"';
ELSE
strSQL := strSQL|| ' WHERE V.COGNOME = "VERDI"';
END IF;
strSQL := strSQL|| ' ORDER BY ID';
EXECUTE IMMEDIATE strSQL BULK COLLECT
INTO v_id_coll;
FOR i IN 1..v_id_coll.COUNT LOOP
dbms_output.put_line(v_id_coll(i));
END LOOP;
END;Come di vede dal codice bisogna creare un tipo che in questo caso sara’ una collection di number, quindi si crea una variabile del tipo appena creato che conterra’ TUTTI gli id ricavati dalla query. Successivamente si puo’ scorrere la collection con un normale FOR – LOOP.
Alla Prossima!
Luca









Lascia un commento