Dudas sobre arreglos en Oracle Forms Developer 6.0 con datos distintos y uso de report

No se como hacer un arreglo en Oracle Forms del Developer 6.0
Además tiene que ser un arreglo de datos distintos (char,numerico, date);
Además es posible que como parámetro pueda pasar un arreglo al report y que el report lo procese.

1 respuesta

Respuesta
1
Yo lo solucioné simulando un array con un VARCHAR2 de la sig. manera:
- Me creé un package (en el mismo form) para el arreglo.
- El package tenía como variable de trabajo un VARCHAR2 con el máximo de long. (32767 creo que es), a este varchar2 le llamé "arreglo". El package tiene otra variable "contador" de tipo INTEGER, inicialmente a 0 y que cuenta el nº de elementos.
- La idea es dividir el varchar2 en subcadenas del mismo tamaño (particiones), cada subcadena es un elemento del array. A su vez, el elemento puede ser cualquiera, aunque hay que hacer conversiones antes de guardarlo/recuperarlo del array.
Por ejemplo, un elemento se podría definir como:
type t_elem = record
cadena varchar2(10),
fecha varchar2(8),
numero varchar2(5)
end;
El elemento definido es un registro con tres campos, todos varchar2, porque la idea es guardar todo como texto, aunque luego veremos como sacar los datos en su tipo correcto. Un elemento ocupa 23 carácteres (10+8+5), por lo que podemos tener 32767/23=1424 elementos como máximo.
Si tenemos definidas las vars. del package como:
arreglo VARCHAR2(32752); -- 1424 elementos
contador INTEGER := 0;
entonces, podemos definir métodos de acceso al arreglo:
PROCEDURE Insertar(p_cad V2, p_fecha DATE, p_nro NUMBER) IS
BEGIN
arreglo := arreglo || LPAD(p_cad, 10) || LPAD(TO_CHAR(p_fecha, 'DDMMYYYY'),8) || RPAD(TO_CHAR(p_nro),5);
contador := contador + 1;
END;
Los métodos de consulta serían tal que así:
FUNCTION Fecha(indice: INTEGER) RETURN DATE IS
BEGIN
RETURN TO_DATE( SUBSTR( SUBSTR(arreglo, (indice-1)*23+1, 23), 11, 8), 'DDMMYYYY');
END;
FUNCTION Numero(indice: INTEGER) RETURN DATE IS
BEGIN
RETURN TO_NUMBER( SUBSTR( SUBSTR(arreglo, (indice-1)*23+1, 23), 19, 5));
END;
Etcétera...
Lo malo de esta solución es que no se pueden crear arreglos muy grandes (depende también. Del tamaño de los elementos del arreglo, claro). Lo bueno es que funciona bastante bien y lo hace en cualquier versión del Developer Forms. Con esta técnica he implementado arreglos, listas, pilas, colas, ...
Si metes el package en una librería PLL, podrás usarla desde el form y desde el report. Podrías pasarle un varchar2 con el arreglo y el report interpretarlo, mediante la pll enlazada al report.
Si todo esto es insuficiente, quizás podría resolver tu problema almacenando los elementos del arreglo en una tabla temporal.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas