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

Devolver una consulta select desde un PL

Estas en el tema de Devolver una consulta select desde un PL en el foro de Oracle en Foros del Web. Hola, ¿se puede realizar eso? ¿Cómo (qué tipo de variable defines que luego puedas devolver mediante un return y que lo que devuelva sea los ...
  #1 (permalink)  
Antiguo 29/10/2007, 05:31
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Devolver una consulta select desde un PL

Hola,

¿se puede realizar eso? ¿Cómo (qué tipo de variable defines que luego puedas devolver mediante un return y que lo que devuelva sea los registros de tipo select, para recoger desde una página ASP)?
  #2 (permalink)  
Antiguo 29/10/2007, 05:45
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Devolver una consulta select desde un PL

Hola,

Puedes intentar este ejemplo.

Código:
create or replace procedure p1 
(q out sys_refcursor)
is
begin

open q for
select * from dual;

end p1;
Además tienes que agregar PLSQLRSet=1; en el string de conexión de ADO.

Saludos.
  #3 (permalink)  
Antiguo 29/10/2007, 07:17
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Re: Devolver una consulta select desde un PL

Es decir, ¿con un procedimiento en lugar de una función?

Bueno, y si hay que añadir ese parámetro, lo veo demasiado poco directo, creo que buscaré una solución alternativa.

Gracias, un saludo
  #4 (permalink)  
Antiguo 29/10/2007, 08:25
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Devolver una consulta select desde un PL

Hola,

Es lo mismo utilizar una funcion que un procedimiento, la diferencia es donde esperar el sys_refcursor, ya sea por retorno o por parametro de salida.

Código:
SQL> create or replace function f1 return sys_refcursor
  2  is
  3  q sys_refcursor;
  4  begin
  5  open q for select * from dual;
  6  return q;
  7  end;
  8  /

Function created.
La idea era comentar que sys_refcursor es el tipo de dato que provee Oralce para devolver un conjunto de resultados hacia ADO.

Saludos
  #5 (permalink)  
Antiguo 02/11/2007, 06:59
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Re: Devolver una consulta select desde un PL

¡Ok, gracias!

¿Y cómo se devolvería un cursor?
  #6 (permalink)  
Antiguo 02/11/2007, 09:27
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Devolver una consulta select desde un PL

Hola,

Eso depende de como estes accediendo a base de datos, posteo un ejemplo que utiliza ADO 2.8 y jscript.

Código:
SQL> create table t10 (id number, nombre varchar2(100));

Tabla creada.

SQL> insert into t10 values (1,'nombre 1');

1 fila creada.

SQL> insert into t10 values (2,'nombre 2');

1 fila creada.

SQL> insert into t10 values (3,'nombre 3');

1 fila creada.

SQL> commit;

SQL> select * from t10;

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

SQL>

SQL> create or replace procedure p1 (c out sys_refcursor)
  2  is
  3  begin
  4  open c for
  5  select * from t10;
  6  end;
  7  /

Procedimiento creado.
Ahora el ConnectionString de ADO

Código:
"Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=user_name;Data Source=ora_sid;PLSQLRSet=1;"
Saludos.

Última edición por matanga; 15/11/2007 a las 01:31 Razón: Se quita codigo de programacion, no corresponde al foro.
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 07:20.