`
lpm528
  • 浏览: 81252 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

游标的三种定义方式(转)

阅读更多

/********************/
--游标的几种定义方式
--隐式游标
--显示游标
--游标变量
/********************/

--隐式游标1
--这个例子演示了游标属性的用法
--游标属性:%FOUND,%NOTFOUND,%ISOPEN,%ROWCOUNT
--注意COMMIT的位置,如果commit在游标属性之前,游标属性失效
DECLARE
BEGIN
UPDATE emp SET emp.deptno=20 WHERE emp.deptno='20';
--COMMIT;
IF sql%NOTFOUND THEN dbms_output.put_line('没有任何记录');
ELSE dbms_output.put_line(sql%ROWCOUNT);
END IF;
COMMIT;
END;

--隐式游标2

--游标for循环,因为没有显示的定义游标,所以没有open,没有close,也没有fetch into
DECLARE
dep emp.deptno%type;
BEGIN
FOR cur IN (SELECT emp.deptno FROM emp)
LOOP
dbms_output.put_line(cur.deptno);
END LOOP;
--以下写法错误,因为没有显式定义游标,所以fetch into不能使用
/*FOR cur2 IN (SELECT emp.deptno FROM emp)
LOOP
FETCH cur2 INTO dep;
EXIT WHEN cur2%NOTFOUND;
dbms_output.put_line(dep);
END LOOP;*/
END;

--显式游标
DECLARE
CURSOR cur IS SELECT deptno t1,ename t2 FROM emp;
dep emp.deptno%type;
ena emp.ename%type;
BEGIN
--打开游标
OPEN cur;
LOOP
FETCH cur INTO dep,ena;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(dep);
dbms_output.put_line(ena);
END LOOP;
dbms_output.put_line('影响'||cur%ROWCOUNT);
--关闭游标
CLOSE cur;
--dbms_output.put_line('影响'||cur%ROWCOUNT);放在这里会错误,因为游标已经关闭
--游标for循环,不需要打开和关闭
FOR r IN cur
LOOP
dbms_output.put_line(r.t1);
dbms_output.put_line(r.t2);
END LOOP;
END;

 

 

--游标变量
DECLARE
TYPE curtype IS REF CURSOR;
cur curtype;
dep emp.deptno%type;
ena emp.ename%type;

--顺带演示一下自定义类型

TYPE emptype IS RECORD(
dep emp.deptno%TYPE,
ena emp.ename%TYPE
);
empt emptype;
BEGIN

OPEN cur FOR SELECT deptno t1,ename t2 FROM emp;
LOOP
FETCH cur INTO dep,ena;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(dep);
dbms_output.put_line(ena);
END LOOP;
dbms_output.put_line('影响'||cur%ROWCOUNT);
CLOSE cur;

--与上例的区别在于,fetch into 到一个自定义类型的变量

OPEN cur FOR SELECT deptno t1,ename t2 FROM emp;
LOOP
FETCH cur INTO empt;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(empt.dep);
dbms_output.put_line(empt.ena);
END LOOP;
dbms_output.put_line('影响'||cur%ROWCOUNT);
CLOSE cur;

END;

 

总结一下,在查询的时候,隐式游标使用游标for循环,显式游标可可以使用游标for循环也可以open、close,游标变量使用open for,游标变量不和特定的查询结合在一起,例如:open cur for select t.emptno from emp t loop .....end loop; close cur;之后还可以直接写 open cur for select t.ename from emp t loop.....end loop; close cur;。在显式游标和游标变量的情况下,可以用游标名+游标属性的方式来使用游标属性,例如cur%isopen;

分享到:
评论

相关推荐

    Oracle函数游标以及包的定义

    该文件讲解了Oracle数据库中函数游标的创建以及包的定义,对数据库有更深层次的了解

    oracle游标介绍[定义].pdf

    oracle游标介绍[定义].pdf

    LabVIEW 的游标图例

    创建游标时,游标模式定义了游标位置,共有3种模式:自由、单曲线和多曲线,如图3所示。同一图形中可创建多个游标。  自由模式不考虑曲线的位置,游标可以在整个图形区域自由移动。  单曲线表示仅将游标置于与其...

    游标的使用

    游标的使用 游标的使用 游标的使用 游标的使用 游标的使用 不会可以联系我

    了解orcale的游标的使用 和应用

    了解orcale的游标的使用 和应用

    游标教程光标的定义与使用

    ORACLE游标教程 Oracle 光标是一种用于轻松的处理多行数据的机制

    Transact-SQL游标[定义].pdf

    Transact-SQL游标[定义].pdf

    oracle 隐式游标,显示游标,游标循环

    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或...

    SQL_SERVER游标最新详解[定义].pdf

    SQL_SERVER游标最新详解[定义].pdf

    关于游标使用sql

    -- 定义游标. DECLARE c_test_main CURSOR FAST_FORWARD FOR SELECT id, value FROM test_main; -- 打开游标. OPEN c_test_main; --填充数据. FETCH NEXT FROM c_test_main INTO @id, @value; --假如...

    Mysql的游标的定义使用及关闭深入分析

    给我们喜欢用mysql的朋友们更喜欢mysql的理由了,语法上和PL/SQL有差别,不过搞过编程的人都知道,语法不是问题,关键是思想,大致了解语法后,就从变量定义,循环,判断,游标,异常处理这个几个方面详细学习了。...

    sql 存储过程常用函数及游标用法

    sql 存储过程常用函数及游标用法 这里包括 字符函数,数据库维护命令,所有游标的用法以及日期函数

    游标使用方法

    游标的使用,及自动生成序列号。游标遍历,及定义序列号规则。

    oracle 游标 深入浅出 详解 精析 示例

    oracle游标 详解 精析 示例 真正能把游标讲透、说全、调理清晰的讲义。...游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。 游标是一个通过定义语句与一条Select语句相关联的一组SQL语句。

    MSSQL 游标使用 心得

    游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法。 1.如何使用游标 1)定义游标语句 ...游标名> 6)游标应用实例 –定义游标 Declare cur_Depart Cursor For Select cDeptID,cDeptN

    简单游标实例

    内涵增删查改实例 如果能不用游标,尽量不要使用游标 用完用完之后一定要关闭和释放 性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源

    youngzil#quickstart-database#游标(cursor)的定义1

    定义了一个游标,使用declare 游标名 cursor for 来定义游标,该处查询用户表里的用户名, 存储过程处理完成后,游标就消失(因为它局限于存储过程)

    游标卡尺原理与接口 pdf

    游标卡尺原理:榕栅传感器.pdf,容栅系统.pdf,数显卡尺接口技术的研究.pdf

    sql游标实例,更新行

    declare @Number varchar(100) --定义变量物料代码 declare @qty decimal(18,6) --定义变量数量 declare @SPID int --定义变量仓位代码 declare @BatchNo varchar(100) --定义变量批号 declare @DID int declare @...

    MS SQL SERVER 游标详解

    从中读者可以了解游标的优点、种类、作用、学会如何定义、打开、存取、关闭、释放游标以及游标的应用。除此之外,在本章的后半部分我们介绍了视图和用户自定义函数,使读者了解视图的众多优点,比如简化操作、提高...

Global site tag (gtag.js) - Google Analytics