Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/05/2008, 04:23
Keyser
 
Fecha de Ingreso: junio-2007
Mensajes: 13
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Duda Procedimiento Oracle

Gracias matanga por la respuesta lo primero. Lo segundo es que no sé si lo que quiero hacer se puede. En mi procedimiento he de construir la query primero en función de varios parámetros, ejemplo:

[...............viene codigo................]
IF INSTR(condR,'%') <> 0 THEN
Item := RTRIM(LTRIM(SUBSTR(condR, 1, INSTR(condR,',')-1)));
condR := RTRIM(LTRIM(SUBSTR(condR, INSTR(condR,',') + 1, LENGTH(condR))));
sqlR := 'r.lru like ''' || Item || '';
WHILE LENGTH(condR) > 1 LOOP
Item := RTRIM(LTRIM(SUBSTR(condR, 1, INSTR(condR,',')-1)));
condR := RTRIM(LTRIM(SUBSTR(condR, INSTR(condR,',')+1 , LENGTH(condR))));
IF LENGTH(Item) > 0 THEN
sqlR := sqlR || ''' or r.lru like ''' || UPPER(Item) || '';
sql20 := sql20 || ''' or nombre like ''' || UPPER(Item) || '';
END IF;
END LOOP;
s_sql := s_sql || ' and (' || sqlR || ''')';
ELSE
[................sigue más código...............]

Con lo cual según lo que explicas, tras construir mi query después de muchas vueltas, la instrucción que debería utilizar sería...

OPEN o_remCursor FOR s_sql;

(s_sql es mi varchar donde tendré la query final)

Lo que necesito es, una vez tengo en una variable (s_sql en el ejemplo anterior) la consulta que me devolverá todos los datos que he de mostrar, ejecutarla para que el sys_refcursor que va como parámetro de salida, me vaya devolviendo las filas de tal forma que pueda manejar cada columna de éstas e ir construyendo la tabla, en resumen.

En definitiva, ¿se puede hacer así?

Gracias por todo :)


Cita:
Iniciado por matanga Ver Mensaje
Hola,

Te dejo procedimiento, que en resumen, incluye todos los ejemplos que creo vas a necesitar.

1. Creo el procedimiento, que toma como parametro el nombre de la tabla a la que tiene que consultar, y por parametro de salida devuelve el conjunto de resultados

Código:
oracle@A9I> 
  1  create or replace procedure p1 (table_name varchar2, c out sys_refcursor)
  2  as
  3  begin
  4  open c for 'select * from ' || table_name;
  5* end;

Procedimiento creado.
2. Ejecuto el procedimiento, el formato del ejemplo tiene que ver con el SQL*Plus, la llamada puede variar si se hace desde algun Driver o Provider.

Código:
oracle@A9I> variable c refcursor
oracle@A9I> exec p1('DUAL',:c);

Procedimiento PL/SQL terminado correctamente.
3. Finalmente, muestro por pantalla el conjunto de resultados de la consulta.

Código:
oracle@A9I> print c

D
-
X

Transcurrido: 00:00:00.00
Saludos