Oracle

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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;

4 thoughts on “Types en Oracle

  1. Holas, estoy tratando de implementar este ejemplo que has dado, pero no sé en dónde debe ir la parte DECLARE dentro del procedimiento almacenado que escribo.

    Sé que han pasado años de este artículo, pero en verdad desearía que puedas responderme.

    Muchísimas gracias por anticipado. Saludos! 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *