一、游标的相关概念:

  定义:

   游标它是一个服务器端的存储区,这个区域提供给用户使用,在这个区域里

  存储的是用户通过一个查询语句得到的结果集,用户通过控制这个游标区域当中

  的指针 来提取游标中的数据,然后来进行操作。

  实质:

   是用户在远程客户端上对服务器内存区域的操作,由数据库为用户提供这样的

  一个指针,使得用户能够去检索服务器内存区的数据。

   (1)、 指向上下文区域的句柄或指针

   (2)、上下文区域-用于SQL处理的内存区

   (3)、上下文区域的内容

   - 语句处理的行数

   -指向语句的语法分析表示的指针

  二、游标的类型

   a)静态游标

   -  隐式游标

   -  显式游标

   b)Ref游标

  三、游标具有的属性

   %notfound 询问是否没有结果集

   %found    询问是否存在结果集

   %rowcount 返回受影响的行数

   %isopen   询问游标是否已经打开

  四、隐式游标

   隐式游标 ---由Oracle数据库自动创建,名称是(SQL) ,主要用途是可以返回一个操作是否成功或失败.

   1.有Oracle在内部声明,由系统管理

   2.用于处理

   -DML语句   --注意只能用于DML语句哦。

   -返回单行的查询

   3.用于判断一个操作是否成功.

   SQL%notfound  --返回Boolean值  存在结果集返回 False

   SQL%found    --返回Boolean值   存在结果集返回 True

   SQL%rowcount  --用户成功提取数据的行数

   SQL%isopen   --在隐式游标里一般这个属性是自动打开和关闭的.且任何时候查询都返回False

  示例:向表中插入一行数据,询问是否插入成功.

declare
   iCount int:=0;
 begin
    insert into place values(2,'beijing');
    DBMS_output.put_line('游标所影响的行数:'||SQL%rowcount);
    if SQL%NotFount then
      DBMS_output.put_line('NotFount为真);
    else
      DBMS_output.put_line('NofFount为假');
    end if;
 
     if SQL%Fount then
      DBMS_output.put_line('Fount为真);
     else
      DBMS_output.put_line('Fount为假');
     end if;       if SQL%isopen then
      DBMS_output.put_line('isOpen为真);
     else
      DBMS_output.put_line('isOpen为假');
     end if;
    
    isCount:=SQL%rowcount;
    DBMS_output.put_line('影响了'||isCount||'行');
  end;

显示游标:

SQL> declare
2 --定义游标类型sp_test_cursor
3 type sp_test_cursor is ref cursor;
4 --定义一个游标变量
5 test_cursor sp_test_cursor;
6 --定义变量
7 v_name mytest.name%type;
8 v_passwd mytest.passwd%type;
9 begin
10 --执行 把cursor和一个select结合
11 open test_cursor for select name,passwd from mytest;
12 loop
13 fetch test_cursor into v_name,v_passwd;
14 --跳出循环的条件即判断当前游标是否为空
15 exit when test_cursor%notfound;
16 dbms_output.put_line('name:'||v_name||' passwd:'||v_passwd);
17 end loop;
18 --关闭游标
19 close test_cursor;
20 end;
21 / name:123 passwd:123
name:gaodingle!!!! passwd:123
name:gagaga passwd:123
name:125555 passwd:passwd PL/SQL procedure successfully completed SQL> declare
2 type sp_cursor is ref cursor;
3 test_cursor sp_cursor;
4 v_id mytest.id%type;
5 v_name mytest.name%type;
6 v_passwd mytest.passwd%type;
7 v_salary mytest.salary%type;
8 begin
9 open test_cursor for select id,name,passwd,salary from mytest;
10 loop
11 fetch test_cursor into v_id,v_name,v_passwd,v_salary;
12 if v_salary=100 then
13 update mytest set salary=v_salary+50 where id=v_id;
14 end if;
15 exit when test_cursor%notfound;
16 end loop;
17 close test_cursor;
18 end;
19 / PL/SQL procedure successfully completed SQL> select * from mytest; ID NAME PASSWD SALARY
----- -------------------- -------------------- --------------------------------------------------------------------------------
1 123 123 150
2 gaodingle!!!! 123 150
3 gagaga 123 150
4 125555 passwd 50

最新文章

  1. JavaScript排序算法——冒泡排序
  2. Sqoop_mysql,hive,hdfs导入导出操作
  3. 数组包含字典-根据key排序
  4. poj 1597 Uniform Generator【生成指定范围内所有随机数】
  5. Android中的PopupWindow的使用
  6. 一个关于css3背景透明的例子
  7. 手动制作rpm包
  8. Design Pattern Command 命令设计模式
  9. 2017年 Java 程序员,风光背后的危机
  10. 苹果OS系统安装Xcode方法
  11. Mysql 5.7--ubuntu18.04 安装过程及遇到的问题
  12. [福大软工] Z班 第12次成绩排行榜
  13. WSGI、uwsgi和uWSGI
  14. 201621123075 week06-接口、内部类
  15. Opensource Licenses
  16. VS2017 配置ImageMagick
  17. 前端开发VScode常用插件
  18. vue 中使用 Toast弹框
  19. Javascript中的原型、原型链(十)
  20. java基础-day26

热门文章

  1. 【BZOJ】2982: combination(lucas定理+乘法逆元)
  2. 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)
  3. [Linux 学习] Centos 图形和命令行界面切换
  4. 高性能javascript 文件加载阻塞
  5. hdu4045(递推)
  6. iOS中的armv6、armv7、armv7s
  7. xmpp muc 群聊协议 1
  8. cannot be cast to javax.servletFilter
  9. vitess元数据跨机房灾备解决方案
  10. 13.php面向对象