Oracle笔记:循环及游标

原创 2013年12月05日 17:06:49

循环及退出循环:

--while
--初值
while 条件
loop
  循环体;
  循环变量的变化;
end loop;

--break
if 条件 then
  exit;
end if;

--continue
<<label>>
....
if 条件 then
  goto label;
end if; 

--例
declare
  i integer;
  j integer;
begin  
  j:=1;
  <<b>>  
  while j<=9
  loop  
     i:=1;       
     <<a>>
     while i<=j  
     loop
       if i=3 then
         i:=i+1;
         j:=j+1;
         goto b; 
       end if;
       dbms_output.put(i||'*'||j||'='||i*j||'  ');
       i:=i+1; 
     end loop;
     dbms_output.put_line('');  
     j:=j+1;
  end loop ;
end;
游标的使用:

--游标
Result rs = stmt.excuteQuery();
while(rs.next())
{
  rs.getString(1);
}

select * from emp;
--游标:指向缓冲区数据行的一个指针(句柄)。
--指针就是存放地址的一个变量。
--用法:
1、声明(declare部分): 
   cursor 游标名 is 
   select语句块(标明了游标所指向的数据区域);
2、打开(begin end执行体中)
   open 游标名;
   (只有在打开游标时,select语句才真正执行,
    并把首行地址放入游标)
3、提取游标所指向的数据行(循环)
   fetch 游标名 into 指定变量(自行处理)

4、关闭游标
   close 游标名;
   
注意:
1、如果想再次使用被关闭的游标,可以重新开发游标。
2、游标是单向的。如果想重新访问开头的数据,只能
   关闭后重新打开使用。
3、重要属性: %found  %notfound(没有找到数据)
4、fetch同时完成两件事:
   1)移向下一行
   2)提取数据   
--例子  

declare
  v_emp emp%rowtype;
  cursor cur_emps is
   select * from emp;
begin
  open cur_emps;  
  loop
    fetch  cur_emps into v_emp;
    exit when cur_emps%notfound;
    dbms_output.put(v_emp.empno||' ');
    dbms_output.put(v_emp.ename||' ');
    dbms_output.put_line(v_emp.deptno);     
  end loop;
  close cur_emps;
end;

--游标类型的变量
declare
 cursor cur_emps is
   select empno,ename,sal,deptno from emp;   
 v_emp cur_emps%rowtype;
begin
  open cur_emps;  
  loop
    fetch  cur_emps into v_emp;
    exit when cur_emps%notfound;
    dbms_output.put(v_emp.empno||' ');
    dbms_output.put(v_emp.ename||' ');
    dbms_output.put_line(v_emp.deptno);     
  end loop;
  close cur_emps;
end;

--参数
declare
 cursor cur_emps(dept_no integer) is
   select empno,ename,sal,deptno from emp 
   where deptno=dept_no;   
 v_emp cur_emps%rowtype;
begin
  open cur_emps(20);  
  loop
    fetch  cur_emps into v_emp;
    exit when cur_emps%notfound;
    dbms_output.put(v_emp.empno||' ');
    dbms_output.put(v_emp.ename||' ');
    dbms_output.put_line(v_emp.deptno);     
  end loop;
  close cur_emps;
  
  open cur_emps(30);  
  loop
    fetch  cur_emps into v_emp;
    exit when cur_emps%notfound;
    dbms_output.put(v_emp.empno||' ');
    dbms_output.put(v_emp.ename||' ');
    dbms_output.put_line(v_emp.deptno);     
  end loop;
  close cur_emps;
end;


版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle游标的使用方法以及使用for循环实现游标的原理

select * from tb_grade t for update    --1普通游标(显示游标)    declare    --定义游标 用于查询表结构的数据集    cursor ...
  • t0404
  • t0404
  • 2016年07月01日 23:44
  • 1192

oracle显示游标和游标for循环案例

--显示游标案例 declare  cursor emp_cursor(department in number default 20)  is select empno,ename,job,s...
  • yhuohuo
  • yhuohuo
  • 2014年08月10日 17:39
  • 1323

使用Oracle显式游标及for循环

转载地址:   http://blog.csdn.net/wanghuan220323/article/details/7792669     使用隐式游标和显式游标: 1...
  • qiuyinthree
  • qiuyinthree
  • 2016年09月12日 20:22
  • 459

Oracle游标—for、loop、if结合应用

需求 什么时候会用到Oracle游标,以及其中的for、loop、if呢? 先看这样一个需求: 有一张学生授课表T_TEACHING,每个学生都有数门课程: 主键ID(自增) 课程号COU...
  • akkzhjj
  • akkzhjj
  • 2015年04月30日 19:07
  • 2950

Oracle 游标for循环

/* 游标的for循环 pl/sql语言提供了游标的for循环语句,【自动执行游标的open,fetch,close语句和循环语句的功能】,当进入循环时, 游标for循环语句自动打开游标,并提取第一行...
  • u010452908
  • u010452908
  • 2014年12月28日 23:11
  • 618

oracle 游标嵌套使用

今天想要在游标里面嵌套一个游标
  • yingsuzhilei
  • yingsuzhilei
  • 2014年09月19日 17:55
  • 1882

oracle调用子存储过程+游标循环实例

一,有子节点的子节点的排序
  • u011518709
  • u011518709
  • 2014年11月05日 16:20
  • 1008

存储过程遍历游标三种方式

CREATE OR REPLACE PROCEDURE PRC_LJ IS    CURSOR C_EMP IS --声明显式游标       SELECT EMPNO,ENAME FROM ...
  • menghuannvxia
  • menghuannvxia
  • 2016年02月17日 14:49
  • 6603

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常

游标的概念:      游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处...
  • u011809238
  • u011809238
  • 2017年05月09日 18:47
  • 483

Oracle游标-提取记录、游标循环

1. 两种提取数据方式: FETCH 游标名 INTO 变量名1[,变量名2...];  FETCH 游标名 INTO 记录变量;  第一种格式中的变量名是用来从游标中接收数据的变量,需要事...
  • zzxiaozhi
  • zzxiaozhi
  • 2015年06月07日 09:54
  • 10785
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle笔记:循环及游标
举报原因:
原因补充:

(最多只允许输入30个字)