Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Crear un Stored Procedure que reciba un array de entrada

Estas en el tema de Crear un Stored Procedure que reciba un array de entrada en el foro de Oracle en Foros del Web. Hola Gente soy nuevo. Y me decidí en escribirles porque no puedo lograr lo que busco y me estoy enredando. Como lo dice el título, ...
  #1 (permalink)  
Antiguo 16/11/2012, 10:55
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Crear un Stored Procedure que reciba un array de entrada

Hola Gente soy nuevo.
Y me decidí en escribirles porque no puedo lograr lo que busco y me estoy enredando.

Como lo dice el título, necesito de su ayuda para lograr crear el SP (Stored Procedure) que me permita pasar un array al SP

Bueno esta es una idea general, porque luego de que funcione correctamente lo podré flexibilizar y agrandar a gusto.

Probé hacer muchas cosas y he revisado muchas páginas de internet.

Les dejo esta idea que es mi paso inicial.
Intento cargar una tabla 'A1' que está compuesta por 3 columnas 'col1', 'col2' y 'col3'; y sus tipos son 'number', 'varchar2(20)' y 'number' respectivamente. Y 'col1' es la PK, las otras puede recibir nulos.
Desde el Java asigno los datos a través de un array.

Algo que intenté hacer es esto:

Código SQL:
Ver original
  1. CREATE OR REPLACE
  2. PROCEDURE insA1(
  3.   p_A1Array IN A1
  4. ) AS
  5. BEGIN
  6.   /* INSERT ARRAY OF RECORDS IN TO THE EMP TABLE*/
  7.   INSERT INTO A1(cl1, cl2, cl3)
  8.      SELECT * FROM TABLE(p_A1Array);
  9. END insA1;*/

Y estuve viendo otras formas que definen TYPES, 2 TYPES y se cruzan y No Entendí!!!

Bueno espero me puedan ayudar.
Y agradezco mucho sus tiempos y opiniones
Saludos Yako.

Última edición por gnzsoloyo; 06/12/2012 a las 07:39 Razón: Código SQL sin etiquetar
  #2 (permalink)  
Antiguo 02/12/2012, 14:13
 
Fecha de Ingreso: enero-2009
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Crear un Stored Procedure que reciba un array de entrada

podrías hacerlo declarando rowtype de la tabla (A1%ROWTYPE) pero no te lo aconsejo porque cualquier cambio en la estructura de la tabla podrá desmontarte el código que ya tengas hecho, por mi parte te recomiendo que declares TYPE con tabla de registros y utilices ese TYPE en el paso de parámetros.
Código SQL:
Ver original
  1. /*
  2.  * Creamos la tabla
  3.  */
  4. CREATE TABLE A1(
  5.     col1    NUMBER ,
  6.     col2    varchar2(20),
  7.     col3    NUMBER
  8. );
  9.  
  10. /*
  11.  * Definimos un tipo de datos registro identico a la tabla
  12.  */
  13. TYPE T_A1 IS RECORD(
  14.     col1    A1.col1%TYPE ,
  15.     col2    A1.col2%TYPE ,
  16.     col3    A1.col3%TYPE
  17. );
  18.  
  19. /*
  20.  * Definimos una tabla de registros T_A1
  21.  */
  22. TYPE T_TABLA_A1 IS TABLE OF T_A1 INDEX BY BINARY_INTEGER;
  23.  
  24. /*
  25.  * Procedimiento de inserción en A1
  26.  */
  27. CREATE OR REPLACE PROCEDURE P_INSERT_A1( P_TABLA_A1 IN T_TABLA_A1 ) IS
  28.     I BYNARY_INTEGER;
  29. BEGIN
  30.     IF P_TABLA_A1.COUNT() > 0 THEN
  31.    
  32.         I := P_TABLA_A1.FIRST();
  33.         LOOP
  34.        
  35.             INSERT INTO A1(col1,col2,col3)
  36.             VALUES(P_TABLA_A1(I).col1,P_TABLA_A1(I).col2,P_TABLA_A1(I).col3);
  37.        
  38.         EXIT WHEN I = P_TABLA_A1.LAST();
  39.    
  40.             I := P_TABLA_A1.NEXT(I);
  41.        
  42.         END LOOP;
  43.        
  44. END P_INSERT_A1;

Un saludo
__________________
Anotaciones de un programador

Última edición por gnzsoloyo; 06/12/2012 a las 07:39 Razón: Código SQL mal etiquetado
  #3 (permalink)  
Antiguo 06/12/2012, 06:54
 
Fecha de Ingreso: enero-2009
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Crear un Stored Procedure que reciba un array de entrada

Espero que te haya servido de ayuda
__________________
Anotaciones de un programador

Última edición por morway; 11/12/2012 a las 18:03

Etiquetas: entrada, funcion, procedure, select, stored, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:04.