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

Ejecutar una función que retorna un Cursor

Estas en el tema de Ejecutar una función que retorna un Cursor en el foro de Oracle en Foros del Web. Holas, Cómo ejecuto o "llamo" a una función que está en un Package. La función retorna un cursor.. Dicha función quiero ejecutarla en el PL/SQL ...
  #1 (permalink)  
Antiguo 15/07/2008, 13:14
 
Fecha de Ingreso: febrero-2006
Ubicación: Puerto Montt
Mensajes: 76
Antigüedad: 18 años, 2 meses
Puntos: 0
Ejecutar una función que retorna un Cursor

Holas, Cómo ejecuto o "llamo" a una función que está en un Package.
La función retorna un cursor.. Dicha función quiero ejecutarla en el PL/SQL developer para probar si efectivamente retorna los valores que deseo.

Esperando comentarios..

Saludos
  #2 (permalink)  
Antiguo 15/07/2008, 15:05
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Ejecutar una función que retorna un Cursor

QUE TAL,

PUEDES EJECUTA ALGO COMO ESTO,

DECLARE
TYPE TU_CURSOR IS REF CURSOR;
vrInfCur TU_CURSOR;
vnVar1 NUMBER(1);
vvVar2 VARCHAR2(10);
BEGIN

vrInfCur := TU_PAQUETE.tu_funcion;

LOOP
FETCH vrInfCur INTO vnVar1, vvVar2;
EXIT WHEN vrInfCur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('VALORES: '||vnVar1||' '||vvVar2);
END LOOP;

END;

ESPERO TE SEA DE UTILIDAD.
  #3 (permalink)  
Antiguo 15/07/2008, 15:53
 
Fecha de Ingreso: febrero-2006
Ubicación: Puerto Montt
Mensajes: 76
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Ejecutar una función que retorna un Cursor

esta es la función abreviada:

FUNCTION NOmbreFuncion(po_cursor IN OUT t_cursor) RETURN t_cursor is
BEGIN
OPEN po_cursor FOR
SELECT id_x,id_y From Tabla ;
RETURN (po_cursor);
END NOmbreFuncion;

vrInfCur := TU_PAQUETE.tu_funcion(COMO PASO EL PARAMETRO po_cursor);

intente de varias formar pero obtengo solo errores.

Gracias por la ayuda.

Saludos
  #4 (permalink)  
Antiguo 15/07/2008, 16:18
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Ejecutar una función que retorna un Cursor

Que Tal,

No Entendí la parte de pasar como parámetro de entrada un RefCursor y luego tratar de llenarlo y regresarlo.
Cual es el Fin de Pasarlo como parámetro de Entrada y Salida?.

Si puedes detallarme, un poco más tu requerimiento, con gusto puedo ayudarte.

Saludos.
  #5 (permalink)  
Antiguo 15/07/2008, 16:48
 
Fecha de Ingreso: febrero-2006
Ubicación: Puerto Montt
Mensajes: 76
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Ejecutar una función que retorna un Cursor

Como bien dices no tiene niguna razón pasar un cursor y regresar el mismo cursor, para efectos prácticos esta demás. Lo que quiero realizar en realidad es obtener una lista de datos de Oracle conectandome a través de .NET (c#) accediendo a un paquete que contenga una función que entregue dicha info. Según lo leido esa es la forma de hacerlo, pasando un cursor a la función.

Espero que sea clara la explicación. Por cierto, primera vez que trabajo con funciones en Oracle.

Saludos
  #6 (permalink)  
Antiguo 15/07/2008, 17:30
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Ejecutar una función que retorna un Cursor

O.K. ENTONCES TU FUNCIÓN DEBERÍA DE QUEDAR ASÍ

FUNCTION NOmbreFuncion RETURN t_cursor is
po_cursor T_CURSOR;
BEGIN
OPEN po_cursor FOR
SELECT id_x,id_y
From Tabla ;
RETURN po_cursor;
END NOmbreFuncion;

PERO ANTES DEBES DE DECLARAR EN EL ENCABEZADO DE TU PAQUETE UN TIPO REF CURSOR DE NOMBRE T_CURSOR

TYPE T_CURSOR IS REF CURSOR;

SALUDOS.
  #7 (permalink)  
Antiguo 17/07/2008, 08:27
 
Fecha de Ingreso: febrero-2006
Ubicación: Puerto Montt
Mensajes: 76
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Ejecutar una función que retorna un Cursor

Perfecto, lo implemente y obtengo la lista de valores!!!!

Se agradece.

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 10:57.