oracle 游标

 游标:隐式游标和显示游标。html

1 隐式游标sql

隐式游标种类:数据库

DML操做和单行SELECT语句会使用隐式游标,它们是: 
* 插入操做:INSERT。 
* 更新操做:UPDATE。 
* 删除操做:DELETE。 
* 单行查询操做:SELECT ... INTO ...(一次只能从数据库中提取一行数据,获取多行数据用显示游标)。 oop

 

游标属性:fetch

隐式游标的属性 返回值类型   意    义   
SQL%ROWCOUNT    整型  表明DML语句成功执行的数据行数   
SQL%FOUND   布尔型 值为TRUE表明插入、删除、更新或单行查询操做成功   
SQL%NOTFOUND    布尔型 与SQL%FOUND属性返回值相反   
SQL%ISOPEN  布尔型 DML执行过程当中为真,结束后为假

示例1:使用隐式游标的属性,判断对雇员工资的修改是否成功。 htm

BEGIN
  UPDATE emp SET sal = sal + 100 WHERE empno = 1234;
  IF SQL%FOUND THEN
    DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');
    COMMIT;
  ELSE
    DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');
  END IF;
END;

  

 

2 显示游标blog

游标步骤:声明游标 、打开游标 、提取数据、关闭游标。get

显式游标的属性:class

游标的属性   返回值类型   意    义   
%ROWCOUNT   整型  得到FETCH语句返回的数据行数   
%FOUND  布尔型 最近的FETCH语句返回一行数据则为真,不然为假   
%NOTFOUND   布尔型 与%FOUND属性返回值相反   
%ISOPEN 布尔型 游标已经打开时值为真,不然为假  

  

DECLARE
  V_ename VARCHAR2(10);
  CURSOR emp_cursor IS
    SELECT ename FROM emp;
BEGIN
  OPEN emp_cursor;
  IF emp_cursor%ISOPEN THEN
    LOOP
      FETCH emp_cursor
        INTO v_ename;
      EXIT WHEN emp_cursor%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(to_char(emp_cursor%ROWCOUNT) || '-' || v_ename);
    END LOOP;
  ELSE
    DBMS_OUTPUT.PUT_LINE('用户信息:游标没有打开!');
  END IF;
  CLOSE emp_cursor;
END;

  

2.1 fetch 读取游标select

declare
  zb_row scsj_zb%rowtype;
  cursor my_cursor is
    select * from scsj_zb where rownum < 3;
begin
  open my_cursor;

  for i in 1 .. 3 loop
    fetch my_cursor
      into zb_row;
    dbms_output.put_line(zb_row.zb_bm);
  end loop;

  close my_cursor;
end;

 

declare
  zbbm varchar(50);
  zbmc varchar(50);
  cursor my_cursor is
    select zb_bm, zbmc from scsj_zb a where rownum < 3;
begin
  open my_cursor;

  for i in 1 .. 3 loop
    fetch my_cursor
      into zbbm, zbmc;
    dbms_output.put_line(zbbm || ':' || zbmc);
  end loop;

  close my_cursor;
end;

  

 

SET SERVEROUTPUT ON    
BEGIN  
 FOR re IN (SELECT ename FROM EMP)  LOOP   
  DBMS_OUTPUT.PUT_LINE(re.ename)   
 END LOOP;   
END;  

  

2.2 for 读取游标

declare
  cursor my_cursor is
    select * from scsj_zb where rownum < 3;
begin
  for my_row in my_cursor loop
    dbms_output.put_line(my_row.zb_bm);
  end loop;
end;

 

详细介绍:http://www.javashuo.com/article/p-ajwchzzw-mm.html

相关文章
相关标签/搜索