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

Procedure

Estas en el tema de Procedure en el foro de Oracle en Foros del Web. Hola a todos!Soy nueva en esto y no me aclaro mucho... Tengo un package que tiene definido un procedimiento almacenado el cual tengo que llamar ...
  #1 (permalink)  
Antiguo 04/03/2008, 05:09
TaM
 
Fecha de Ingreso: noviembre-2005
Mensajes: 58
Antigüedad: 19 años
Puntos: 0
Procedure

Hola a todos!Soy nueva en esto y no me aclaro mucho...

Tengo un package que tiene definido un procedimiento almacenado el cual tengo que llamar desde reporting services.

Al procedimiento le llega un parámetro y dependiendo de él la cláusula where de la consulta es de una manera u otra.

Quiero hacer algo así para no tener que repetir lo común de la consulta:

Procedure TalYPascual (p_recordset OUT t_cursor, p_parametro IN varchar2) IS
p_where varchar2(2000);

BEGIN

if p_parametro IS NULL then
p_where := 'Where ... 1';
else
p_where := 'Where ... 2';
end if;

OPEN p_recordset FOR

SELECT ... || p_where;

End TalYPascual ;

el recordset no me coge la consulta anidándole el string. Si la consulta select la creo como string, le anido el where y luego lo llamo con el recordset me funciona bien pero yo necesito llamar a unas funciones en el select pasándole algunos campos y si lo pongo como string no puedo recoger esos campos.

Me podéis ayudar plis??

Gracias!
  #2 (permalink)  
Antiguo 04/03/2008, 05:39
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Procedure

Hola,

Puedes llamar a las funciones en el select aun cuando utilizas SQL Dinamico.

Código:
SQL> desc t1
 Nombre                                    ┐Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 DATOS                                              VARCHAR2(30)

SQL> create or replace procedure p10 (c1 out sys_refcursor, param varchar2)
  2  is
  3  begin
  4
  5
  6  open c1 for
  7  'select max(id) from t1 where id in ('||param||')';
  8
  9  end p10;
 10  /

Procedimiento creado.
En general, y en mi humilde opinion, considero este tipo de tecnicas una mala practica, aunque entiendo que en determinados escenarios no hay opcion :)

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 13:27.