2017-10-06 20 views
0

カーソルを使って外部テーブルを照会するプロシージャがあります。 selectにテーブル名を渡すにはどうすればよいですか?どのようにパラメータとしてカーソルのテーブル名を渡すことができますか?

procedure ImpInsData(fileN varchar2,Tname VARCHAR2) 
as 
begin 
    IXRBI.EXternalChange (fileN,Tname);  
    declare 
     cursor cur_extenal is select * from Tname WHERE A IN ('1','2'); 
    begin 
     FOR rec IN cur_extenal LOOP 
     vId :=sys_guid(); 
     vRowStatus:=rec.A; 
     vTag:=rec.C; 
     end loop 
    end; 
end; 

Tnameは、テーブル名を指定するパラメータです。

どのように書き換えることができますか?

+2

あなたは本当に傾けることができます。 –

+0

"open for use"をチェックしてください。簡単なGoogle検索で[この場所](http://www.adp-gmbh.ch/ora/plsql/cursors/dynamic.html)の例が見つかりました –

答えて

0
procedure ImpInsData(fileN varchar2) 
as 
CURSOR cur_extenal IS 
(
select * from Tname WHERE A IN ('1','2') 
); 
begin 
open cur_extenal 

FETCH cur_extenal into rec 
     FOR rec IN cur_extenal LOOP 
     vId :=sys_guid(); 
     vRowStatus:=rec.A; 
     vTag:=rec.C; 
exit when cur_extenal%notfound; 
     end loop; 
close cur_extenal; 
    end; 
+0

この回答は、OPの投稿されたコードを書き換えますが、実際に問題を解決するわけではありません。正解には[この他のSOスレッドでの私の答え](https://stackoverflow.com/a/29693016/146325)などの動的SQLの使用が必要です。 – APC

関連する問題