OR REPLACE TRIGGER trg_test

before update

ON cm_bogie_inandoutreport

DECLARE

//定义游标,查找表里边的每一列的值

cursor c_bogie is select s_bureaunumno c_b_bureaunumno,

s_serialnum c_b_serialnum,

s_trainsetid c_b_trainsetid

from cm_bogie_inandoutreport;

BEGIN

//循环赋值

for v_record in c_bogie loop

update test_mhb t

set t.s_id=v_record.c_b_bureaunumno

where t.s_sex = v_record.c_b_bureaunumno;

dbms_output.put_line(c_b_bureaunumno);

end loop;

END trg_test;

循环

一般循环大概分为三种:基本循环(loop),WHILE循环, FOR循环

1.基本循环

LOOP

statement1;

......

EXIT [WHEN condition];

END LOOP;

当使用基本循环时,无论是否满足条件,语句至少会被执行一次,当condition为TRUE时,会退出循环,并执行END LOOP后的相应操作。当编写基本循环时一定要包含EXIT语句,否则会陷入死循环。另外还应该定义循环控制变量,并且在循环体内修改循环控制变量的值。示例:

SQL> declare

i int:=1;

begin

loop

insert into testloop values(i);

exit when i=10;

i:=i+1;

end loop;

end;

2.WHILE循环

基本循环至少要执行一次循环体内的语句,而对于WHILE循环来说,只有条件为TRUE时,才会执行循环体内的语句。WHILE循环以WHILE …LOOP开始,以END LOOP结束。

WHILE condition LOOP

statement1;

statement2;

.....

END LOOP;

当condition为TRUE时,执行循环体内的语句,而当condition为FALSE或NULL时,会退出循环,并执行END LOOP后的语句。当使用WHILE循环时,应该定义循环控制变量,并在循环体内改变循环控制变量的值。示例:

SQL> declare

i int:=1;

begin

while i<=10 loop

insert into testloop values(i);

i:=i+1;

end loop;

end;

3.FOR循环

当使用基本循环或WHILE循环时,需要定义循环控制变量,并且循环控制变量不仅可以使用NUMBER类型,也可以使用其他数据类型。当使用FOR循环时,ORACLE会隐含定义循环控制变量。

FOR counter in [REVERSE] lower_bound. .upper_bound LOOP

statement1;

statement2;

.......

END LOOP;

在我们查询的时候是用select和into一起使用,把select的内容放到into里边,而cursor给我们提供了一个便利,那么问题来了

什么是游标?

①从表中检索出结果集,从中每次指向一条记录进行交互的机制。

②关系数据库中的操作是在完整的行集合上执行的。

由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所列条件的所有行。由该语句返回完整的行集合叫做结果集。

应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的。

这些应用程序需要一种机制来一次处理一行或连续的几行。而游标是对提供这一机制的结果集的扩展。

游标是通过游标库来实现的。游标库是常常作为数据库系统或数据访问 API 的一部分而得以实现的软件,

用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,

以及是否能够在结果集中向前和/或向后移动(可滚动性)。

游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。

换句话说,游标从概念上讲基于数据库的表返回结果集。

由于它指示结果集中的当前位置 ,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。

2,游标有什么作用?

①指定结果集中特定行的位置。

②基于当前的结果集位置检索一行或连续的几行。

③在结果集的当前位置修改行中的数据。

④对其他用户所做的数据更改定义不同的敏感性级别。

⑤可以以编程的方式访问数据库。

3、游标怎么用

例子1:

/* conn scott/tiger */

Declare

Cursor myCur is select empno,ename,sal from emp;

vna varchar2(10);

vno number(4);

vsal number(7,2);

Begin

open myCur;

fetch myCur into vno,vna,vsal;

dbms_output.put_line(vno||‘ ‘||vna||‘ ‘||vsal);

close myCur;

End;

/

例子2:使用loop遍历游标。

/* conn scott/tiger */

Declare

Cursor myCur is select ename,job,sal,empno from emp;

varE myCur%rowType;

Begin

if myCur%isopen = false then

open myCur;

dbms_output.put_line(‘Opening...‘);

end if;

loop

fetch myCur into varE;

exit when myCur%notfound;

dbms_output.put_line(myCur%rowCount||‘ ‘||vare.empno||‘ ‘||vare.ename||‘ ‘||vare.sal);

end loop;

if myCur%isopen then

Close myCur;

dbms_output.put_line(‘Closing...‘);

end if;

End;

其实游标还是挺好用的,就和Select 。。。into...一样,游标大家把他当作是一个表就可以,只不过这个游标还是指向咱们查询出来表的第一行。

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

Oracle的循环和Corsor

标签:数据库   cursor

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://blog.csdn.net/lovemenghaibin/article/details/47763769

oracle or 循环 查询,Oracle的循环和Corsor相关推荐

  1. oracle 数据库循环查询语句怎么写,sql循环查询(sql语句循环查询详解)

    sql循环查询(sql语句循环查询详解) 2020-07-24 11:15:51 共10个回答 select*fromawheret_idin('3','4');select*fromawheret_ ...

  2. oracle字段去重查询,oracle怎么去重查询

    oracle怎么去重查询 oracle去重查询的方法是: oracle 数据库多字段去重 方法介绍:distinct 关键字.group by .row_number ()over(partition ...

  3. oracle分组聚合查询,Oracle中分组查询group by用法规则解析

    本篇文章小编给大家分享一下Oracle中分组查询group by用法规则解析,文章介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Oracle中group by ...

  4. oracle关联分组查询,oracle中关联查询、分组查询

    高级查询 1.关联查询 作用:可以跨越多表查询 --查询出员工的名字和他所在部门的的名字 //古老的写法 select first_name,name from s_emp,s_dept where ...

  5. oracle分页排序查询,Oracle分页查询中排序与效率问题解决方法详解

    本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题. 原始未分页查询Sql代码如下: select ROWNUM rn, ...

  6. oracle hive 数据类型,查询oracle数据字典,并对应出hive的数据类型

    SQL开始 select t2.owner||'.'||t2.TABLE_NAME 源表名, 'dl_{0}_seq.'||'tt_{1}_'||lower(t2.table_name) hive表名 ...

  7. Oracle系列:查询Oracle所有实例名字

    #查询Oracle所有实例名字 shell# su - oracle shell# sqlplus / as sysdba SQL> select instance_name from v$in ...

  8. oracle 数据库怎么查询,Oracle 数据库基础查询

    1.1文件存储 对数据的存储需求一直存在.数据保存的方式,经历了手工管理.文件管理,数据库管理阶段. 文件存储方式保存数据的弊端: 1.缺乏对数据的整体管理,数据不便修改: 2.不利于数据分析和共享; ...

  9. oracle日期时间范围查询,Oracle的日期时间范围查询-Oracle

    Oracle日期时间范围查询 Sql代码 /* 日期时间范围查询 */ ---- 创建日期时间测试表-------------------–    www.2cto.com create table ...

最新文章

  1. 41、OrthoMCL和mcl软件进行基因家族分析
  2. cv mat保存图片_(七)神秘的Mat
  3. 对HTTPCONNECTION的理解
  4. C++ 关于“堆对象和栈对象”
  5. C#获取 Flv视频文件播放时间长度等信息
  6. CAD中怎么将Z轴归零?CADZ轴归零教程
  7. KB2999226安装提示 此更新不适用你的计算机
  8. 实验二 任务二 体重测量
  9. 【数仓】数据质量监控
  10. 【PTA】斐波那契数列第n项
  11. windows安装paddlepaddle踩坑教程
  12. Django学习日志三:模型层
  13. Android实现网页图片下载器
  14. 华为——宏达电最需要害怕的新对手
  15. Java如何创建一个文件对象
  16. 递归遍历与for循环遍历:递归遍历实现、理解简单
  17. 什么是“ parentalcontrolsd”,为什么它在我的Mac上运行?
  18. 【Ray】ray.remote和option
  19. 红叶李之虚拟机以及Centos安装
  20. 开放式式商业模式_开放式办公室最符合行政人员而不是公司的最大利益

热门文章

  1. Android—AspectJ实践
  2. python工程技巧_python 19个值得学习的编程技巧
  3. 关于如何安装less
  4. 去除bootstrap中input输入框的蓝色光
  5. git回滚到某一个commit
  6. python中matrix是什么意思_Python的基础语法
  7. 03-instancing 工程分析详解
  8. Undefined symbols for architecture i386问题解决方法
  9. python右键没有idle编辑了_Python文件右键找不到IDLE打开项解决办法
  10. Java编程——服务器设计方案之应用限流