2011-01-17 9 views
7

Ich habe eine gespeicherte Prozedur, die den Befehl EXECUTE IMMEDIATE verwendet, um eine sehr lange Zeichenfolge auszuführen. Wie unterstütze ich einen sehr langen String und gebe die Daten in einen Refcursor zurück?Oracle EXECUTE IMMEDIATE in einen Cursor

+4

Wie lange ist "sehr lang"? Mehr als 32K? –

+0

Welche Datenbankversion? – DCookie

Antwort

12

Unter der Annahme, dass Ihr SQL nicht länger als 32 KB (als @Tony Andrews angedeutet), sollten Sie in der Lage sein, so etwas zu verwenden:

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

Bei der Arbeit mit Ref Cursors kann open-for direkt verwendet werden , anstelle von execute immediate.