Oracle12C--游标(三十五)

知识点的梳理:

  • 游标可以将指定查询记录中的数据逐行取出,每行数据单独进行处理;
  • 静态游标分为两类:
    • 隐式游标:在PL/SQL 块中编写的每条SQL 语句实际上是隐式游标;
      • 隐式游标分为:单行隐式游标和多行隐式游标;
    • 显示游标:由用户明确定义的游标;
      • 显式游标有4个基本属性:%FOUND,%ISOPEN,%NOTFOUND,%ROWCOUNT;
  • 利用FOR语句可以自动打开和关闭游标,不需要由用户手工打开;
  • FOR UDPATE子句会将游标提取出来的数据进行行级锁定,使本会话更新期间,其他用户的会话不能对当前游标中的数据进行更新操作;
  • 使用FOR UPDATE 子句锁定当前行之后,可以利用WHERE CURRENT OF子句进行当前行的更新或删除操作;
  • 游标变量是指在游标使用时才为其设置具体的查询语句;

      

  • 简介
    • sql编写的查询语句会将所有结果显示给用户;如果我们需要对返回结果中的每一条数据分别进行操作,可通过结果集来接收,利用游标进行操作;
      • 从表中检索出结果集后,这个结果集的数据管理统一交给游标来控制;
      • 游标会降低性能;
    • 游标分为两类:
      • 静态游标:结果集已经存在(静态定义)的游标,分为隐式和显示游标两种;
        • 隐式游标:所有DML语句为隐式游标,通过它可以获取SQL语句信息;
        • 显示游标:用户显示声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显示游标;
      • REF游标:动态关联结果集的临时对象;
  • 隐式游标
    • PL/SQL块中编写的每条SQL语句实际上是隐式游标;
    • 示例1:通过ROWCOUNT属性,获得语句所改变的行数

DECLARE

v_count NUMBER ;

BEGIN

SELECT COUNT(*) INTO v_count FROM dept ; -- 只返回一行结果

DBMS_OUTPUT.put_line('SQL%ROWCOUNT = '|| SQL%ROWCOUNT) ;

END ;

/

运行结果:
SQL%ROWCOUNT = 1

  • 示例2验证ROWCOUNT,增加新数据返回行数

DECLARE

BEGIN

INSERT INTO dept(deptno,dname,loc) VALUES (90,'MLDN','北京') ;

DBMS_OUTPUT.put_line('SQL%ROWCOUNT = '|| SQL%ROWCOUNT) ;

END ;

/

运行结果:
SQL%ROWCOUNT = 1

  • " SQL%ROWCOUNT "中的SQL是一个关键字,表示的是任意的一个隐式游标,但是在PL/SQL中,对于隐式游标SQL可用的属性一共有4个,如下表:
  • 单行隐式游标
    • 通过SQL语句查询时,可以使用select...into这样的结构,将查询结果设置给指定的变量,返回的结果一般都是一行数据,此游标称为单行隐式游标;
    • 示例1单行隐式游标

DECLARE

v_empRow                emp%ROWTYPE;-- 保存emp每行记录

BEGIN

SELECT * INTO v_empRow FROM emp WHERE empno=7369 ;

IF SQL%FOUND THEN                        -- 发现数据

DBMS_OUTPUT.put_line('雇员姓名:' || v_empRow.ename || ',职位:' || v_empRow.job) ;

END IF ;

END ;

/

运行结果:
雇员姓名:SMITH,职位:CLERK

  • 多行隐式游标
    • 主要是指更新多行数据,或者是查询返回多行数据的操作;
    • 示例1:更新多行记录

BEGIN

UPDATE emp SET sal=sal*1.2 ;

IF SQL%FOUND THEN -- 发现数据

DBMS_OUTPUT.put_line('更新记录行数:' ||SQL%ROWCOUNT) ;

ELSE

DBMS_OUTPUT.put_line('没有记录被修改!') ;

END IF ;

END ;

/

运行结果:
更新记录行数:14

  • --
    • --
      • --
        • --
          • --
            • --
              •  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值