1.--For 循环游标
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
end;
2.动态游标
create or replace procedure P_TEST_SQL
is
tablename varchar2(200) default 'ess_client';
v_sql varchar2(1000);
mobile varchar2(15);
TYPE ref_cursor_type IS REF CURSOR; --定义一个动态游标
usrs ref_cursor_type; --定义游标变量 注意最后一定要关闭游标
begin
--使用连接符拼接成一条完整SQL
v_sql := 'select usrmsisdn from '||tablename||' where rownum < 11';
--打开游标
open usrs for v_sql ;
loop
fetch usrs into mobile;
exit when usrs%notfound;
insert into tmp(usrmsisdn) values(mobile);
end loop;
close usrs; --注意最后一定要关闭游标
commit;
end P_TEST_SQL;
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
end;
2.动态游标
create or replace procedure P_TEST_SQL
is
tablename varchar2(200) default 'ess_client';
v_sql varchar2(1000);
mobile varchar2(15);
TYPE ref_cursor_type IS REF CURSOR; --定义一个动态游标
usrs ref_cursor_type; --定义游标变量 注意最后一定要关闭游标
begin
--使用连接符拼接成一条完整SQL
v_sql := 'select usrmsisdn from '||tablename||' where rownum < 11';
--打开游标
open usrs for v_sql ;
loop
fetch usrs into mobile;
exit when usrs%notfound;
insert into tmp(usrmsisdn) values(mobile);
end loop;
close usrs; --注意最后一定要关闭游标
commit;
end P_TEST_SQL;