日期:2014-05-16 浏览次数:20495 次
-- 声明游标;CURSOR cursor_name IS select_statement
?
--For 循环游标
--(1)定义游标
--(2)定义游标变量
--(3)使用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;
?
?
?
--Fetch游标
--使用的时候必须要明确的打开和关闭
?
declare?
? ? ? ?--类型定义
? ? ? ?cursor c_job
? ? ? ?is
? ? ? ?select empno,ename,job,sal
? ? ? ?from emp
? ? ? ?where job='MANAGER';
? ? ? ?--定义一个游标变量
? ? ? ?c_row c_job%rowtype;
begin
? ? ? ?open c_job;
? ? ? ? ?loop
? ? ? ? ? ?--提取一行数据到c_row
? ? ? ? ? ?fetch c_job into c_row;
? ? ? ? ? ?--判读是否提取到值,没取到值就退出
? ? ? ? ? ?--取到值c_job%notfound 是false?
? ? ? ? ? ?--取不到值c_job%notfound 是true
? ? ? ? ? ?exit when c_job%notfound;
? ? ? ? ? ? dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
? ? ? ? ?end loop;
? ? ? ?--关闭游标
? ? ? close c_job;
end;
?
--1:任意执行一个update操作,用隐式游标sql的属性%found,%notfound,%rowcount,%isopen观察update语句的执行情况。
? ? ? ?begin
? ? ? ? ?update emp set ENAME='ALEARK' WHERE EMPNO=7469;
? ? ? ? ?if sql%isopen then
? ? ? ? ? ?dbms_output.put_line('Openging');
? ? ? ? ? ?else
? ? ? ? ? ? ?dbms_output.put_line('closing');
? ? ? ? ? ? ?end if;
? ? ? ? ? if sql%found then
? ? ? ? ? ? dbms_output.put_line('游标指向了有效行');--判断游标是否指向有效行
? ? ? ? ? ? else
? ? ? ? ? ? ? dbms_output.put_line('Sorry');
? ? ? ? ? ? ? end if;
? ? ? ? ? ? ? if sql%notfound then
? ? ? ? ? ? ? ? dbms_output.put_line('Also Sorry');
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? dbms_output.put_line('Haha');
? ? ? ? ? ? ? ? ? end if;
? ? ? ? ? ? ? ? ? ?dbms_output.put_line(sql%rowcount);
? ? ? ? ? ? ? ? ? ?exception?
? ? ? ? ? ? ? ? ? ? ?when no_data_found then
? ? ? ? ? ? ? ? ? ? ? ?dbms_output.put_line('Sorry No data');
? ? ? ? ? ? ? ? ? ? ? ?when too_many_rows then
? ? ? ? ? ? ? ? ? ? ? ? ?dbms_output.put_line('Too Many rows');
? ? ? ? ? ? ? ? ? ? ? ? ?end;
declare
? ? ? ?empNumber emp.EMPNO%TYPE;
? ? ? ?empName emp.ENAME%TYPE;
? ? ? ?begin
? ? ? ? ?if sql%isopen then
? ? ? ? ? ?dbms_output.put_line('Cursor is opinging');
? ? ? ? ? ?else
? ? ? ? ? ? ?dbms_output.put_line('Cursor is Close');
? ? ? ? ? ? ?end if;
? ? ? ? ? ? ?if sql%notfound then
? ? ? ? ? ? ? ?dbms_output.put_line('No Value');
? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ?dbms_output.put_line(empNumber);
? ? ? ? ? ? ? ? ?end if;
? ? ? ? ? ? ? ? ?dbms_output.put_line(sql%rowcount);
? ? ? ? ? ? ? ? ?dbms_output.put_line('-------------');
?
? ? ? ? ? ? ? ? ?select EMPNO,ENAME into ?empNumber,empName from emp where EMPNO=7499;
? ? ? ? ? ? ? ? ?dbms_output.put_line(sql%rowcount);
?
? ? ? ? ? ? ? ? if sql%isopen then
? ? ? ? ? ? ? ? dbms_output.put_line('Cursor is opinging');
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? dbms_output.put_line('Cursor is Closing');
? ? ? ? ? ? ? ? end if;
? ? ? ? ? ? ? ? ?if sql%notfound then
? ? ? ? ? ? ? ? ?dbms_output.put_line('No Value');
? ? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ?dbms_output.put_line(empNumber);
? ? ? ? ? ? ? ? ?end if;
? ? ? ? ? ? ? ? ?exception?
? ? ? ? ? ? ? ? ? ?when no_data_found th