Professional Documents
Culture Documents
PL/SQL Collections
Lo que aprenderemos en éste capítulo
2
Collections
aa bb cc dd ee ff gg hh ii jj kk
1 2 3 4 5 6 7 8 9 10 11
3
Collections - Utilidad
4
Collections
TRES TIPOS DE COLLECTIONS
6
Collections - ASSOCIATIVE ARRAYS
7
Collections - NESTED TABLES
8
Collections - NESTED TABLES
Requiere
inicialización
9
Collections - NESTED TABLES
10
Collections - VARRAYS
11
Collections - VARRAYS
12
Cómo escoger el tipo de Collection ?
q Use associative arrays cuando se necesite....
– Trabajar sólo con código PL/SQL
– Llenar de manera dispersa una collection
– Usar índices negativos o strings
q Use tablas anidadas cuando se necesite....
– Manipular la collection desde SQL (table functions, columnas en
tablas)
– Realizar operaciones de conjunto de alto nivel.
q Use varrays cuando se necesite....
– Especificar un tamaño máximo para su collection
– Manipular la collection desde SQL (table functions, columnas en
tablas)
13
Métodos para Collections
14
Collections - Consideraciones
q La memoria para las collections sale de la PGA o UGA.
– Cada sesión tiene su propia área de memoria, así que
un programa que use collections puede consumir
grandes cantidades de memoria
q Usar hint de NOCOPY para reducir overhead por paso de
parámetros.
q Si se trata de leer una fila que no existe, Oracle levanta
NO_DATA_FOUND.
15
Collections – Table Functions
CREATE OR REPLACE TYPE lista_telefonos_t IS TABLE OF VARCHAR2
(100);
/
CREATE OR REPLACE FUNCTION mis_telefonos
RETURN lista_telefonos_t
IS
directorio lista_telefonos_t:=lista_telefonos_t();
BEGIN
directorio.EXTEND (4);
directorio (1) := '2666777';
directorio (2) := '0976119995';
directorio (3) := '2333000';
directorio (4) := '1800678678';
return directorio;
END;
16
Collections – Table Functions
q Una Table function es una función que usted puede llamar
desde el FROM de un query, y tratarla como si fuera un query
relacional.
q Permiten realizar transformaciones complejas sobre los
datos y después entregar los datos a través de un query.
q Combinados con REF CURSORS, ahora usted puede
transferir datos fácilmente a otros ambientes (por ejemplo,
Java)
17
Collections – Table Functions
18
Arreglos multidimensionales
DECLARE
TYPE tipo_tab1 IS TABLE OF VARCHAR2(20); -- nested table de cadenas
var_tab1 tipo_tab1 := tipo_tab1('pl/sql', 'tuning','dba1');
var_tab2 tipo_tab1 := tipo_tab1('java', 'itil','oca');
TYPE tipo_tab2 IS TABLE OF tipo_tab1; -- nested table de una nested table de cadenas
var_tabm tipo_tab2 := tipo_tab2();
BEGIN
var_tabm.extend(2);
var_tabm(1):=var_tab1;
var_tabm(2):=var_tab2;
for i in var_tabm.first ..var_tabm.last loop
dbms_output.put_line('Elemento '||i||' de la tabla multidimensional');
var_tab3:=var_tabm(i);
for j in var_tab3.first ..var_tab3.last loop
dbms_output.put(var_tab3(j)||',');
end loop;
dbms_output.put_line('-----------------------');
end loop;
END;
/ 19
Lo que aprendimos en éste
capítulo
20