带有 table 参数的光标

Cursor with table parameter

是否可以使用 table 名称作为参数声明游标然后循环遍历它?

我正在尝试这样的事情:

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: table or view does not exist

在游标声明中(在上面的代码中标记为[here points the error])。

有人知道它有什么问题吗?

没有 table 叫作 'l_tab'。 (编辑:我明白你想做什么,我只是从编译器的角度描述它。)

要在运行时改变 table,您需要 dynamic sql,例如

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

(也没有针对显式打开的游标的 for r in c loop 游标循环构造,因此您的下一个挑战将是如何管理未知的 table 结构,除非您的用例保证所有 tables 作为 l_tab 传递将具有共同的结构。)