带表参数的游标

时间:2016-11-23 12:03:30

标签: plsql oracle11g cursor

是否可以使用表名作为参数声明游标,然后循环它?

我正在尝试这样的事情:

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:表或视图不存在

在游标声明中(在上面的代码中标记为[此处指出错误])。

任何人都知道它有什么问题吗?

1 个答案:

答案 0 :(得分:1)

没有名为' l_tab'的表格。 (编辑:我得到你正在尝试做的事情,我只是从编译器的角度来描述它。)

要在运行时更改表格,您需要dynamic sql,例如

open c for 'select * from ' || l_tab;

(显式打开的游标没有for r in c loop游标循环结构,因此您的下一个挑战将是如何管理未知的表结构,除非您的用例保证所有表都以{{{}传递1}}将有一个共同的结构。)