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

bookmark bookmark bookmark bookmark bookmark bookmark

Lascia un commento

Nome: (Required)

eMail: (Required)

Website:

Comment:

 

Qualcosa su di me...

Favaretto Luca, classe '82. Essenzialmente mi occupo di programmazione Oracle come consulente presso la divisione ICT di Enel, ma per passione mi diletto con Photoshop, Joomla, Flash e quant'altro abbia a che fare con la grafica. Spero troverete interessanti e soprattutto utili gli articoli in questo sito. Buona Permanenza!