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