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

Insertar En Una Tabla El Resultado De Un Spl

Estas en el tema de Insertar En Una Tabla El Resultado De Un Spl en el foro de Oracle en Foros del Web. Hola En SQL puedo hacer lo sig: para insertar el resultado de este spl en una tabla INSERT INTO Promociones EXEC spPromocionesProducto @lxProd_id, @lxMov_cantidad, @lxCte_id, ...
  #1 (permalink)  
Antiguo 04/12/2007, 11:46
 
Fecha de Ingreso: septiembre-2007
Mensajes: 2
Antigüedad: 17 años, 1 mes
Puntos: 0
Insertar En Una Tabla El Resultado De Un Spl

Hola

En SQL puedo hacer lo sig: para insertar el resultado de este spl en una tabla

INSERT INTO Promociones EXEC spPromocionesProducto @lxProd_id, @lxMov_cantidad, @lxCte_id, @lxAlm_id, @lxDoc_Fecha, null, @lDoc_Tipo,@CadenaPartidas

Mi pregunta es como se puede hacer esto en oracle? ya que me esta mandando errores.
INSERT INTO PROMOCIONES spPromocionesProducto(lxProd_id,lxMov_cantidad, lxCte_id,lxAlm_id,lxDoc_Fecha,
NULL,lDoc_Tipo,CadenaPartidas)
  #2 (permalink)  
Antiguo 04/12/2007, 13:12
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Insertar En Una Tabla El Resultado De Un Spl

Hola,

Esto es absolutamente diferente en Oracle, dado que los procedimientos almacenados no tienen la posibilidad de devolver registros por retorno como en SQL Server.

Veo dos opciones, o modificas el procedimiento spPromocionesProducto para que directamente inserte los valores en la tabla o...

Supongamos que la tabla t1 tiene los datos, que el procedimiento p1 es el que devuelve el conjunto de resultados y que quieres insertarlos en t2

Código:
SQL> desc t1;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NOMBRE                                             VARCHAR2(39)

SQL> desc t2;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NOMBRE                                             VARCHAR2(39)

SQL> select * from t1;

        ID NOMBRE
---------- ---------------------------------------
         1 nombre 1
         2 nombre 2
         3 nombre 3

SQL> select * from t2;

no rows selected
El codigo del procedimiento p1, para que devuelva un conjunto de resultados debes utilizar el tipo sys_refcursor.

Código:
SQL> create or replace procedure p1
  2  (c1 out sys_refcursor)
  3  as
  4  begin
  5  open c1 for select * from t1;
  6  end;
  7  /

Procedure created.
Ejecutas el procedimiento p1, pero no directamente, necesitas un pequeño bloque de codigo para capturar la salida e insertarla en la tabla t2.

Código:
SQL> declare
  2  c1 sys_refcursor;
  3  rec t2%rowtype;
  4  begin
  5    p1(c1);
  6    fetch c1 into rec;
  7    while c1%FOUND loop
  8    insert into t2 values (rec.id, rec.nombre);
  9    fetch c1 into rec;
 10    end loop;
 11  end;
 12  /

PL/SQL procedure successfully completed.
Finalmente...

Código:
SQL> select * from t2;

        ID NOMBRE
---------- ---------------------------------------
         1 nombre 1
         2 nombre 2
         3 nombre 3
Saludos
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 15:11.