游标--cursor['kɜːsə]

  概念:

                        在执行SQL语句时,Oracle服务器将分配一个内存区域,不仅存储这个语句,还存储语句的结果 — 称为游标
  

 隐式游标
    DML语句或值返回一行结果的select语句时,Oracle服务器将创建一个隐式游标。
        隐式游标是自动的。

 
 显示游标
    select返回多行结果时,就必须创建一个显示游标   -   bulk collect 
    必须手工声明、打开和关闭
 
            cursor cursor_name is sql(sql指,sql语句)
 
      1.在进行任何处理前,必须首先打开游标:
         ---打开显示游标
             分配必要内存,执行select子句检索的数据加载到游标中
             open cursor_name;
             打开游标后,可以将游标中包含的数据赋给变量以进行处理
        
      2.从游标中提取数据:
         ----使用fetch命令来提取游标中的数据
             fetch命令提取数据后将值赋给变量
 
            fetch cursor_name into [v_name1,v_name2,………];
 
               %ROWCOUNT
                      -----处理的行数(DML执行后影响的行数)
                               sql%rowcount
                          cursor_name%rowcount
                 %FOUND
                          ----- 查找到了行
                %NOTFOUND
                           ------ 没查找到行
                sql%notfound
                          ------- cursor_name%notfound
                %ISOPEN
                          ------ 游标是否打开
 
 
      3.关闭游标
             必须明确关闭
             在可执行部分使用close命令
             close cursor_name;
 
实例一:
  1. declare
  2. v_no employee.empno%type;
  3. v_name employee.name%type;
  4. v_sal employee.salary%type;
  5. cursor emp_cursor isselect empno , name , salary
  6. from employee
  7. where empno ='0001';
  8. begin
  9. open emp_cursor;
  10. loop
  11. fetch emp_cursor into v_no,v_name,v_sal;
  12. exitwhen emp_cursor%notfound;
  13. dbms_output.put_line('编号'||v_no||'员工'||v_name||'的工资是'||v_sal);
  14. end loop;
  15. close emp_cursor;
  16. end;
 
 
游标for循环
              (自动open游标)
                     For name in cursorName loop  
                        ...  (处理sql语句)
                     end loop;
            (自动close游标)
实例二:
  1. declare
  2. cursor emps_cursor isselect*from employee order by empno;
  3. v_emp employee%rowtype;
  4. begin
  5. for v_emp in emps_cursor loop
  6. dbms_output.put_line('编号'||v_emp.empno||' 的员工: '||v_emp.name||' 的工资是 : '||v_emp.salary);
  7. end loop;
  8. end;
 
显式游标中:
      cursor_name%rowcount       -----游标推进行数
      cursor_name%found             -----fectch有没有找到找到一行
      cursor_name%notfound       -----fetch没有找到一行
ps:每fetch一次,游标自动推进一行
           %rowtype表示某个表的类型,类似某个表的一行,用来存放表中一行的数据
           游标能再次打开
 
实例三:
  1. declare
  2. cursor em_cursor isselect*from employee order by salary desc;
  3. v_emp employee%rowtype;
  4. begin
  5. open em_cursor;
  6. fetch em_cursor into v_emp;
  7. while em_cursor%rowcount<=5and em_cursor%found loop
  8. dbms_output.put_line(em_cursor%rowcount||''||v_emp.name||':'||v_emp.salary);
  9. fetch em_cursor into v_emp;
  10. end loop;
  11. close em_cursor;
  12. end;
 
课程作业:
  1. --查询所有学生及其专业信息-显示游标
  2. declare
  3. cursor stuMajors isselect s.stuNo, s.name, s.JavaSEScore, s.score, m.name as majorName
  4. from student s, major m
  5. where s.majorNo = m.majorNo;
  6. --定义变量与查询列一致
  7. v_stuNo student.stuNo%type;
  8. v_name student.name%type;
  9. v_seScore student.javasescore%type;
  10. v_sumscore student.score%type;
  11. v_majorName major.name%type;
  12. --记录
  13. type stumr is record(v_stuNo student.stuNo%type, v_name student.name%type,
  14. v_seScore student.javasescore%type, v_sumscore student.score%type,
  15. v_majorName major.name%type);
  16. stum stumr;
  17. begin
  18. open stuMajors;
  19. -- fetch stuMajors into stum;-- fetch 游标中查询的列应与变量记录中列保持一致
  20. -- dbms_output.put_line(stum.v_name);
  21. -- fetch stumajors into v_stuNo, v_name, v_seScore, v_sumscore, v_majorName;
  22. -- dbms_output.put_line(v_name || v_majorName);
  23. loop
  24. fetch stuMajors into stum;
  25. dbms_output.put_line(stum.v_stuNo ||' '|| stum.v_name ||' '|| stum.v_seScore ||' '||
  26. stum.v_sumScore ||' '|| stum.v_majorName );
  27. -- dbms_output.put_line(stuMajors%rowCount);
  28. exitwhen stuMajors%notFound;
  29. end loop;
  30. close stuMajors;
  31. --游标for循环
  32. end;
 
         
 
 

Cursor--游标的更多相关文章

  1. 【PLSQL】变量声明,结构语句,cursor游标

    ************************************************************************   ****原文:blog.csdn.net/clar ...

  2. cursor游标(mysql)

    /* 游标 cursor 什么是游标?为什么需要游标 使用存储过程对sql进行编程的时候,我们查询的语句可能是数据是多个,它总是一口气全部执行,我们无法针对每一条进行判断.也就是说,我们无法控制程序的 ...

  3. 转 oracle cursor 游标

    转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...

  4. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)

    url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...

  5. SQL SERVER CURSOR游标的使用(转载)

    一:认识游标 游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集. 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据 ...

  6. SQL Cursor 游标的使用

    DECLARE @name VARCHAR(50)  --声明游标 DECLARE cursor_VAA1 CURSOR FOR SELECT VAA05 FROM VAA1 --打开游标 OPEN ...

  7. SQL Cursor(游标)

    1.游标在数据表没有id(identity(1,1))时好用,但是游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量 2.如果能不用游标,尽量不要使用游标,用完用完之后一定要 ...

  8. 关键字(5):cursor游标:(循环操作批量数据)

    declare   cursor stus_cur is select * from students;  --定义游标并且赋值(is 不能和cursor分开使用)    cur_stu studen ...

  9. mysql cursor游标的使用,实例

    mysql被oracle收购后,从mysql-5.5开始,将InnoDB作为默认存储引擎,是一次比较重大的突破.InnoDB作为支持事务的存储引擎,拥有相关的RDBMS特性:包括ACID事务支持,数据 ...

  10. Sql Server - CURSOR (游标)

    1.声明游标            DECLARE 游标名 CURSOR SELECT语句(注:此处一定是SELECT语句)        2.打开游标           OPEN 游标名 3.读取 ...

随机推荐

  1. JS获取事件源对象

    发现问题: 在复杂事件处理过程中,很可能会丢失event事件对象,特别是IE和FireFox两大浏览器,这个时候要捕获事件源就非常困难…… 如果在事件处理过程中,需要不断地传递event事件对象作为参 ...

  2. iOS之Storyboard References

    如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后那些Storyboards 文件变的有多大.他会迅速变的无法管理,阻碍你的进度.自从引入 Story ...

  3. linux下获取ip

    如果打开虚拟机 没有ip置灰显示了 lo 可以使用dhclient自动获取ip 如果想开机就自动获取ip: vim /etc/rc.d/rc.local 在这里插入dhclient命令

  4. Lamp下安装memcached

    1.先安装 libevent,再安装 Memcached主程序 # tar xf libevent-2.0.21-stable.tar.gz # cd libevent-2.0.21-stable # ...

  5. Share_memory

    共享内存是允许多个进程共享一块内存,由此来达到交换信息的进程通信机制:它很快没有中间介质,唯一的不足就是需要一定的同步机制控制多个进程对同一块内存的读/写,,它的原理如下: 每个共享内存段都有一个sh ...

  6. 转:一个C语言实现的类似协程库(StateThreads)

    http://blog.csdn.net/win_lin/article/details/8242653 译文在后面. State Threads for Internet Applications ...

  7. 跟我一起学习VIM - The Life Changing Editor

    前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是对我多年来使用VIM的最大鼓舞吧.所以分 ...

  8. js验证 button 提交

    <form class="form-horizontal" role="form" action="member_add" metho ...

  9. 从零单排Linux – 3 – 目录结构

    从零单排Linux – 3 – 目录结构 1.FHS标准(filesystem hierarchy standard) why? –> 为了规范,还有为了linux的发展 重点 –> 规范 ...

  10. web工程中URL地址的写法

    在开发中我们不可避免的要碰到许多需要写URL地址的情况,这常常让我们感到头疼.下面笔者推荐一种简单的做法.URL地址分为绝对路径和相对路径两种.相对路径又分为相对资源路径和相对根路径.显然绝对路径在开 ...