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

¿como Devuelvo Un Resultado Select Desde Un Procedimieto?

Estas en el tema de ¿como Devuelvo Un Resultado Select Desde Un Procedimieto? en el foro de Oracle en Foros del Web. como hago si quiero devolver una TABLA dentro de un procedimiento o funcion almacenada en oracle?? se que con un cursor se puede ejecutar el ...
  #1 (permalink)  
Antiguo 30/05/2006, 16:41
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años
Puntos: 0
¿como Devuelvo Un Resultado Select Desde Un Procedimieto?

como hago si quiero devolver una TABLA dentro de un procedimiento o funcion almacenada en oracle??

se que con un cursor se puede ejecutar el select...

pero como lo retrono?

Última edición por lesancor; 31/05/2006 a las 06:37
  #2 (permalink)  
Antiguo 30/05/2006, 20:20
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
tienes que definir el TYPE de valor a devolver en el PACKAGE por ejemplo el siguiente:

Código:
   type vc_arr is table of varchar2(32000) index by binary_integer;
ahora en tus procedimientos debes llamarlo en formato IN OUT por ejemplo

Código:
procedure init_cgi_env (param_val  in out vc_arr) is
begin
   ----
   ----
End;
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #3 (permalink)  
Antiguo 31/05/2006, 03:00
Avatar de Worp9975  
Fecha de Ingreso: mayo-2006
Ubicación: LV-426
Mensajes: 203
Antigüedad: 17 años, 10 meses
Puntos: 1
Puedes devolver un cursor ref (tipo REF CURSOR) que te devuelva un cursor con el resultado de la select.

Declaras este tipo en la cabecera de tu paquete o a nivel de esquema :

Código:
type t_ref_cursor is ref cursor ;
Y luego tienes tu procedimiento:

Código:
 
procedure dame_empleados ( cEmpleados     OUT t_ref_cursor) 
is
 
begin
 
   open cEmpleados for select * from emp ;
 
 
end dame_empleados ;
Luego haces tu llamada desde tu lenguaje cliente o tu JSP o lo que sea; también puedes recorrerlo desde otro procedimiento, función de Oracle, ....etc

Salu2
  #4 (permalink)  
Antiguo 31/05/2006, 05:28
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años
Puntos: 0
Ok...pero...

entinedo, pero como defino un type a Nivel de esquema o de paquete??'

uso el aqua studio como cliente para conectarme con el servidor oracle por ejemplo, en mi esquema me salen un monton de carpetas, entre ellas:

- tables.
- procedures.
- functions.
- object types.
- arrat types
- table types.


ya que cuando los defino y quiero ocupar el tipo cursor en mis procedimientos o funciones me tira un error:

PLS-00905: el objeto SHEMA.T_CURSOR no es válido


HE ENCONTRADO ALGO DE una instruccion PIPELINED .... pero tampoco funciona

Última edición por lesancor; 31/05/2006 a las 06:59
  #5 (permalink)  
Antiguo 31/05/2006, 10:29
Avatar de Worp9975  
Fecha de Ingreso: mayo-2006
Ubicación: LV-426
Mensajes: 203
Antigüedad: 17 años, 10 meses
Puntos: 1
Mensaje

Para definir un objeto a nivel de esquema sencillamente te abres un SQLPLUS y lo creas ahí . Por ejemplo :

Código:
 
SQL> create or replace type t_tabla is table of varchar2(1) ;
Type created
Lo que te comenté del REF CURSOR sólo se puede hacer dentro de un paquete/procedimiento/función o bloque anónimo. No a nivel de esquema. Perdona.

Salu2
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 16:39.