如何在光标中传递表名作为参数?

问题描述:

我有一个光标查询外部表的过程。我如何通过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

查看“开放使用”。快速Google搜索在[此位置]找到了一个示例(http://www.adp-gmbh.ch/ora/plsql/cursors/dynamic.html) –

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的发布代码,但实际上并未解决问题。正确的答案需要使用动态SQL,例如[我在其他SO线程中的答案](https://stackoverflow.com/a/29693016/146325)。 – APC