我使用了两个游标: 1) c_emp游标有表数据。2) c_column_names游标包含表中的列。我想使用c_emp游标动态地从c_column_names游标中获取所有列的数据。
我尝试使用以下代码,但它不起作用:
create or replace procedure sp_read_data(in_tb_nm varchar2) as
cursor c_emp is select * from test_table;
begin
open c_column_names for select column_name from all_tab_columns where table_name = 'TEST_TABLE';
for emp_row in c_emp
loop
loop
fetch c_column_names into lc_record;
exit when c_column_names %notfound;
lc_col_nm := 'emp_row.'||lc_record;
v_dtl := v_dtl || rpad (lc_col_nm, 20, ' ');
end loop;
end loop;
end sp_read_data;有没有动态访问游标数据的方法?
发布于 2018-01-17 04:48:11
我觉得你是在重新发明轮子。为什么不使用引用游标呢?
SQL> create or replace function sp_read_data (in_tb_nm in varchar2)
2 return sys_refcursor
3 is
4 cur_r sys_refcursor;
5 begin
6 open cur_r for 'select * from ' || in_tb_nm;
7 return cur_r;
8 end;
9 /
Function created.
SQL> select sp_read_data('departments') from dual;
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
10 Administration 200 1700
20 Marketing 201 1800
30 Purchasing 114 1700
40 Human Resources 203 2400
50 Shipping 121 1500
60 IT 103 1400
<snip>https://stackoverflow.com/questions/48284367
复制相似问题