是否可以使用表名作为参数声明游标,然后循环它?
我正在尝试这样的事情:
create or replace procedure p_update_something as
v_tab varchar2(100) := my_table;
v_name varchar2(100) := my_name;
cursor c_global (l_tab in varchar2, l_name in varchar2) is
select * from l_tab -- [here points the error]
where substr(comp_id, 1,2) in (l_name);
begin
for r in c_global(v_tab, v_name) loop
[update statement]
end loop;
end p_update_something;
但在编译时遇到错误:
ORA-00942:表或视图不存在
在游标声明中(在上面的代码中标记为[此处指出错误])。
任何人都知道它有什么问题吗?
答案 0 :(得分:1)
没有名为' l_tab'的表格。 (编辑:我得到你正在尝试做的事情,我只是从编译器的角度来描述它。)
要在运行时更改表格,您需要dynamic sql,例如
open c for 'select * from ' || l_tab;
(显式打开的游标没有for r in c loop
游标循环结构,因此您的下一个挑战将是如何管理未知的表结构,除非您的用例保证所有表都以{{{}传递1}}将有一个共同的结构。)