Ver Mensaje Individual
  #10 (permalink)  
Antiguo 27/04/2009, 03:57
Sonic_plsql
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
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.