2017-08-07 46 views
0

我正在構建一個過程,首先創建一個select語句並將其存儲在VARCAHR變量中。 我現在要執行該查詢並將整個結果集存儲在一個變量中以循環訪問或直接在for循環中使用。 我只找到在Select循環定義中很難寫入Select的示例。 我如何使用包含我的select語句的變量交換Select語句?PL/SQL過程使用字符串在for循環中選擇語句

for r IN (SELECT ... FROM ...) 
loop 
    --do sth; 
end loop; 

我要如何使用它:

statement := 'SELECT .... FROM ...'; 
for r IN (statement) -- HOW TO DO THIS 
    loop 
     --do sth; 
    end loop; 
+1

尋找Pl/PgSQL中的'EXECUTE'語句... –

+0

你是什麼意思?爲r在EXECUTE IMMEDIATE(聲明)dows不工作 – Mattizin

+0

檢查此:https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm#LNPLS00001 – LoztInSpace

回答

1

對於動態裁判光標,你需要明確界定的一切:

declare 
    sqlstring long := 'select 123 as id, ''demo'' as somevalue from dual where dummy = :b1'; 
    resultset sys_refcursor; 

    type demo_rectype is record 
     (id integer 
     , somevalue varchar2(30)); 

    demorec demo_rectype; 
begin 
    open resultset for sqlstring using 'X'; 

    loop 
     fetch resultset into demorec; 
     exit when resultset%notfound; 
     dbms_output.put_line('id=' || demorec.id || ' somevalue=' || demorec.somevalue); 
    end loop; 

    close resultset; 
end; 

您可以分析光標並找出列名和數據類型與DBMS_SQL。示例:www.williamrobertson.net/documents/refcursor-to-csv.shtml

+0

偉大的,這一個真的幫助,謝謝! – Mattizin

+0

謝謝。添加了有關使用DBMS_SQL來解析遊標的註釋 - 實際的實現細節在這裏發佈有點長。 –