Desde que empecé a trabajar con Oracle siempre me tope con problemas del tipo, ¿Cómo mandar a un procedimiento un set de registros? ¿Cómo regresar de un paquete un campo multi-registro? La solución al viejo estilo siempre quedaba en mandar el resultado a una tabla temporal y después manejar esa información desde la tabla temporal, una solución bastante sucia y poco confiable, se tenían problemas de concurrencia e integridad.
Desde hace un buen rato Oracle maneja varias soluciones para este problema, desde las “global temporary table” (que en otra ocasión hablare de ellas) hasta los “types” existen varias otra opciones que no he manejado, por lo que solo hablare aquí de los tipos (o “types” según se les quiera llamar).
Su uso es bastante sencillo, pero en lugar de explicarlo dejo un ejemplo, es una simple unidad de programa para ver el resultado desde sql*plus, toad o alguna otra herramienta del estilo, espero les sirva:
declare
type type_record is record ( campo1 varchar2(20),
campo2 varchar2(20),
campo3 varchar2(20),
campo4 varchar2(20),
campo5 varchar2(20) );
type type_table is table of type_record index by binary_integer;
v_type_table type_table;
begin
for i in 1..5 loop
v_type_table(i).campo1 := i;
v_type_table(i).campo2 := i+1;
v_type_table(i).campo3 := i+2;
v_type_table(i).campo4 := i+3;
v_type_table(i).campo5 := i+4;
end loop;
for i in 1..v_type_table.count loop
dbms_output.put_line(v_type_table(i).campo1||'-'||
v_type_table(i).campo2||'-'||
v_type_table(i).campo3||'-'||
v_type_table(i).campo4||'-'||
v_type_table(i).campo5);
end loop;
end;