PL/SQL编程—游标

简介: PL/SQL编程—游标

一、游标的相关概念:


 定义:


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


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


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

b767dee657fd86a46c1f05fcdc25978d.png



 实质:

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


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


  (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;

fae94e0b4231888e0427de23b864270b.png

e8335d96274cd782c5fe829ec8972d3e.png


73b43d85cd1ee93ea74d76637029ffb2.png

显示游标:


e86d5c758ca9bdb15a8aea5e6563537b.png

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


目录
相关文章
|
2月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
40 2
|
2月前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
5月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
100 0
|
5月前
|
SQL 数据库 索引
SQL 编程最佳实践简直太牛啦!带你编写高效又可维护的 SQL 代码,轻松应对数据库挑战!
【8月更文挑战第31天】在SQL编程中,高效与可维护的代码至关重要,不仅能提升数据库性能,还降低维护成本。本文通过案例分析探讨SQL最佳实践:避免全表扫描,利用索引加速查询;合理使用JOIN,避免性能问题;避免使用`SELECT *`,减少不必要的数据传输;使用`COMMIT`和`ROLLBACK`确保事务一致性;添加注释提高代码可读性。遵循这些实践,不仅提升性能,还便于后期维护和扩展。应根据具体情况选择合适方法并持续优化SQL代码。
71 0
|
7月前
|
SQL 存储 Java
SQL游标的应用场景及使用方法
SQL游标的应用场景及使用方法
|
7月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
82 3
|
6月前
|
SQL 存储 搜索推荐
SQL游标的原理与在数据库操作中的应用
SQL游标的原理与在数据库操作中的应用
|
6月前
|
SQL Java 数据库连接
SQL游标的基本使用方法与示例
SQL游标的基本使用方法与示例
|
6月前
|
SQL 存储 Java
SQL游标的应用场景及使用方法
SQL游标的应用场景及使用方法
|
7月前
|
SQL 程序员 数据处理
探索SQL游标
探索SQL游标