2017-08-07 14 views
0

私は最初にselect文を作成し、VARCAHR変数に格納するプロシージャを構築しています。 これで、そのクエリを実行し、結果セット全体を変数に格納してループしたり、forループで直接使用したりすることができます。 私は、Selectがforループ定義で記述されていない例しか見つけません。 Selectステートメントを、selectステートメントを保持する変数とどのように交換すればよいですか?私はそれを使用する方法PL/SQLプロシージャforループの文字列Select文を使用

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

:ダイナミックREFカーソルの場合

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

Pl/PgSQLで 'EXECUTE'ステートメントを探します。 –

+0

正確にはどういう意味ですか? EXECUTE IMMEDIATE(文)のrの場合は動作しません – 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を使用した列名とデータ型。例:

+0

本当にありがとう! – Mattizin

+0

ありがとうございます。 DBMS_SQLを使用してカーソルを解析することについての注意を追加しました。実際の実装の詳細は、ここに投稿するのに少し時間がかかります。 –

関連する問題