day12_游标

1、游标:用来处理从数据库中检索的多行记录(使用SELECT语句),通过遍历游标,我们可以对访问到每行记录的数据,并通过游标取出值,从而进行操作。 


2、游标有什么用?
 ①指定结果集中特定行的位置。 
 ②基于当前的结果集位置检索一行或连续的几行。   
 ③直接利用游标更新数据,直接引用表中的行。 
 ④可以以编程的方式访问数据库。



3、游标分类

显示游标(Explicit Cursor):在PL/SQL程序中明确定义的,用于查询的游标称作显示游标。 
隐式游标(Implicit Cursor):没有PL/SQL程序中定义的,使用update/DELETE语句时,Oracle系统自动分配的游标。 


4、使用步骤 

显示游标:(1)定义 (2)打开 (3)使用 (4)关闭 
隐式游标:对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE 系统自动地完成,无需用户进行处理。


set serveroutput on



(1)
create or replace PROCEDURE PROC_EMP1 AS
begin
  declare
    cursor cur_emp is  select empno, ename from emp order by empno; --1.定义游标,名称为cur_emp 
    v_empno varchar2(4); --定义变量,存放游标取出的数据 
    v_ename varchar2(10);
  begin 
    open cur_emp; --2.打开游标cur_emp 
    fetch cur_emp into v_empno, v_ename; --3.将游标的当前行取出存放到变量中 
    while cur_emp%found --游标所指还有数据行,则继续循环 
     loop 
      dbms_output.PUT_LINE('员工号:'||v_empno || '   '||'员工姓名:'|| v_ename); --打印结果 
      fetch cur_emp
        into v_empno, v_ename; --继续将游标所指的当前行取出放到变量中 
    end loop;
    close cur_emp; --4.关闭游标 
  end;
end PROC_EMP1;
/




(2)
create or replace PROCEDURE PROC_EMP2 AS
begin
  update emp set ename = '张燕广' where empno = '1111'; --隐式游标使用 
  if SQL%NOTFOUND then
    --如果更新没有匹配则插入一条新记录 
    insert into emp (empno, ename, SAL, COMM) values ('1111', '张燕广', 555, 666);
    dbms_output.PUT_LINE('没有找到 张燕广,在表中新增了一条记录'); --打印提示 
    commit;
  end if;
  commit;
end PROC_EMP2;
/






5,Oracle游标的状态有哪些,怎么使用游标属性?

  %Found :Fetch语句(获取记录)执行情况True or False。
  %NotFound : 最后一条记录是否提取出True or False。
  %ISOpen : 游标是否打开True or False。
  %RowCount :游标当前提取的行数 。
  
  
begin
update emp Set  SAL = SAL + 100  Where JOB = 'CLERK';
if  SQL%Found  Then
DBMS_OUTPUT.PUT_LINE('找到记录,修改成功!');
else
DBMS_OUTPUT.PUT_LINE('没有到记录,修改未成功!');
end if;
commit;
end;  
/




原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/a75ea471874c8275eae8a9179fd677c4.html