Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/12/2007, 13:12
Avatar de matanga
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