- Blogzote.com - https://www.blogzote.com -

Types en Oracle

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;