2011-01-17 11 views
7

Tengo un procedimiento almacenado que utilizó el comando EXECUTE IMMEDIATE para ejecutar una cadena muy larga. ¿Cómo soporto una cadena muy larga y devuelvo los datos en un refcursor?Oracle EJECUTAR INMEDIATO en un cursor

+4

¿Cuánto tiempo es "muy largo"? Más de 32 K? –

+0

¿Qué versión de base de datos? – DCookie

Respuesta

12

Suponiendo que su SQL es no más de 32 K (como @Tony Andrews hizo alusión a), usted debe ser capaz de usar algo como esto:

declare 
    SQL_Text varchar2(32760) := 'select * from dual'; --your query goes here 
    cur sys_refcursor; 
begin 
    open cur for SQL_Text; 
end; 

Cuando se trabaja con Ref cursores, open-for se puede utilizar directamente , en lugar de execute immediate.

Cuestiones relacionadas