带有 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
传递将具有共同的结构。)
是否可以使用 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
传递将具有共同的结构。)