27/04/2009, 03:57
|
| | Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 8 meses Puntos: 0 | |
Respuesta: Consultas en arrays en plsql Hola a todos,
Os dejo mi solución final, seguro habrá maneras mejores de hacerlo pero por ahora a mi me ha funcionado.
No muestro toda mi función PLSQL pero si como he declarado y la solucion final.
Gracias a todos los que me habeis aportado algo de luz.
-- ZONA DE DECLARACION
DECLARE
v_numeros_varray numeros_array := numeros_array();
v_existe NUMBER;
v_count PLS_INTEGER;
k PLS_INTEGER;
p PLS_INTEGER;
v_numero NUMBER;--1,2,3,4,5,1,2,3
BEGIN
export_numeros_varray := export_numeros_array();
v_count := v_numeros_varray.count;
IF v_count = 0 THEN
k := k + 1;
v_numeros_varray.extend;
v_numeros_varray(k) := v_numero;
ELSE
-- funcion privada dentro de mi paquete PLSQL que comprueba que exista un determinado valor (numero) dentro de un array
-- de datos.
v_existe := existe_numero_array(v_numeros_varray, v_numero);
-- Código de la función privada
/*FUNCTION existe_numero_array(v_numeros_varray IN v_numeros_array,
v_numero IN NUMBER) RETURN NUMBER IS
v_idut NUMBER(14);
v_log VARCHAR2(2000);
v_existe NUMBER(1);
BEGIN
FOR i IN v_numeros_varray.FIRST .. v_numeros_varray.LAST
LOOP
v_valor := v_numeros_varray(i);
IF v_valor = v_numero THEN
RETURN(1); -- ESTA REPETIDO
ELSE
v_existe := 0;
END IF;
END LOOP;
IF v_existe = 0 THEN
RETURN(0); -- NO ESTA REPETIDO
END IF;
END existe_numero_array;*/
IF v_existe = 0 THEN
k := k + 1;
v_numeros_varray.extend;
v_numeros_varray(k) := v_numero;
END IF;
END IF;
-- Si no existe el valor en el array v_numeros_varray relleno otro array con los valores no repetidos.(1,2,3,4,5).
IF v_existe = 0 OR v_count = 0 THEN
p := p + 1;
export_numeros_varray.extend;
export_numeros_varray(p) := export_numeros_array(v_numero)(1);
END IF;
-- Como parametro de salida de mi funcion PLSQL es el array export_numeros_varray que contiene los valores no repetidos.
END; -- fin del bloque. |