Básicamente, lo que necesitaba es crear un proceso que recibiera una lista indefinida de valores (a veces 3, a veces, 4, a veces 20) para guardarlo en una tabla.
En Java (mi mundo) existe la opción de utilizar Varargs pero en Oracle, la verdad es que estaba un poco perdido.
Así que un poquito de googling para sacar alguna conclusión interesante como que Oracle no soporta tipos array (¿?) y para poder utilizarlo debemos definirnos nuestro nuevo tipo:
CREATE OR REPLACE TYPE value_array AS TABLE OF VARCHAR2 (100);
Una vez definido este tipo de datos, podemos utilizarlo para crear una procedure que lo use como entrada. Por ejemplo:
CREATE OR REPLACE PROCEDURE sample_using_arrays (tx_values IN value_array) AS
-- Variables Internas
error_desc VARCHAR (1023);
BEGIN
FOR i IN 1 .. tx_values.COUNT
LOOP
INSERT INTO sample_table (value) VALUES (tx_values (i));
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
error_desc := SUBSTR (SQLERRM, 1, 1023);
DBMS_OUTPUT.put_line ('Error: ' || error_desc);
END;
Con esto ya tendremos definido el tipo de datos y un procedure que lo utilice como dato de entrada.
Finalmente, para realizar una prueba ejecutaríamos el siguiente código:
DECLARE
tx_values value_array := value_array ('Valor 1', 'Valor 2', 'Valor 3');
BEGIN
sample_using_arrays (tx_values);
END;
Y con esto, ya tenemos nuestra primera prueba de concepto para llevarlo a cabo. Algo enrevesado, pero funciona perfectamente. ¿Sabéis algun otro modo (mejor) de llevarlo a cabo?
Muy bueno
ResponderEliminaraprobado
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminar