一、游标分为:隐式游标和显示游标
1.隐式游标:发生与操作的DML语句中 sql游标
例子(实例中的表都是使用的oracle中的初始表):
declare
--拷贝emp的结构+记录
v_sql varchar2(100) :='create table emp_copy2 as select * from emp where 1=1';
--更新记录
v_update_sql varchar2(100) :='update emp_copy2 set sal =sal+1000 where empno=&empno';
begin
--创建表 (存在记录的cud 就存在sql游标)
execute immediate v_sql;
dbms_output.put_line('更新了'||sql%rowcount||'条记录');
--更新记录 (隐式存在SQL游标)
execute immediate v_update_sql;
dbms_output.put_line('更新了'||sql%rowcount||'条记录');
commit;
--查看状态
if not sql%isopen then
dbms_output.put_line('隐式游标自动关闭');
end if;
--删除表
execute immediate 'drop table emp_copy2 cascade constraints';
exception
when no_data_found then
dbms_output.put_line('数据未找到'||sqlcode||'-->'||sqlerrm);
rollback;
when too_many_rows then
dbms_output.put_line('数据超出'||sqlcode||'-->'||sqlerrm);
rollback;
when others then
dbms_output.put_line('其他异常'||sqlcode||'-->'||sqlerrm);
rollback;
end;
2.显示游标:可分为静态游标和动态游标(ref游标)
(1)静态游标:可分为有参和无参
1)实例(无参)
declare
--创建并声明
cursor cur_emp is select ename,sal,dname,loc from emp_copy e join<