利用oracle动态游标实现动态SQL循环遍历
sql示例:
create or replace procedure cursortest6 is
TYPE ref_cursor_type IS REF CURSOR; --定义一个动态游标
t_user ref_cursor_type;
tablename varchar2(200) default 'emp';
v_sql varchar(4000);
v_empno EMP.EMPNO%TYPE;
v_ename EMP.ENAME%TYPE;
v_job EMP.JOB%TYPE;
v_mgr EMP.MGR%TYPE;
v_hiredate EMP.HIREDATE%TYPE;
v_sal EMP.SAL%TYPE;
v_comm EMP.COMM%TYPE;
v_deptno EMP.DEPTNO%TYPE;
begin
--也可以使用连接符拼接成一条完整SQL
v_sql := 'select * from ' || tablename; --动态sql
--打开游标
open t_user for v_sql;
loop
fetch t_user
into v_empno,
v_ename,
v_job,
v_mgr,
v_hiredate,
v_sal,
v_comm,
v_deptno;
exit when t_user%notfound;
insert into emp_rec
values
(v_empno, v_ename, v_job, v_mgr, v_hiredate, v_sal, v_comm, v_deptno);
end loop;
close t_user;
commit;
end cursortest6;
TYPE ref_cursor_type IS REF CURSOR; --定义一个动态游标
t_user ref_cursor_type;--游标变量
--也可以使用连接符拼接成一条完整SQL
v_sql := 'select * from ' || tablename; --动态sql
--打开游标
open t_user for v_sql;
使用open打开一个动态sql。