2011-01-17 16 views
7

Mam procedura składowana, która użyła polecenia EXECUTE IMMEDIATE do wykonania bardzo długiego łańcucha. Jak mogę obsłużyć bardzo długi ciąg i zwrócić dane do refcursora?Oracle WYKONAJ NATYCHMIAST do kursora

+4

Jak długo jest "bardzo długo"? Więcej niż 32K? –

+0

Jaką wersję bazy danych? – DCookie

Odpowiedz

12

Zakładając, że SQL jest nie dłuższy niż 32K (jak @Tony Andrews zasugerował), powinieneś móc używać coś takiego:

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

Podczas pracy z Ref kursorów open-for można stosować bezpośrednio zamiast execute immediate.