这两天啊有一个心的业务,是须要假设我批量改动数据的话,那么还有一张表的数据也须要改动。也是多条的改动,发现这个问题的时候。自然而然的想到了触发器,可是曾经都是简单的单条语句的跟新,没有过整个表的去做一个触发器。今天学习了一下数据库中的循环,这里写一下。
在写触发器的时候用到了一个循环和一个Cursor,触发器例如以下:
CREATE 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...一样,游标大家把他当作是一个表就能够。仅仅只是这个游标还是指向咱们查询出来表的第一行。

最新文章

  1. Redis系列-好玩的用法
  2. Unity学习疑问记录之保卫伦敦塔学习体会
  3. 详解FindBugs的各项检测器 .
  4. 23 其它话题 - 《Python 核心编程》
  5. SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT&#39;OpenRowset/OpenDatasource&#39; 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 &#39;Ad Hoc Distributed Queries&#39;。有关启用 &#39;Ad Hoc Distributed Que
  6. 查看perl及其模块
  7. iOS学习之C语言函数指针
  8. 使用hbase的api创建表时出现的异常
  9. js中常见的问题
  10. go语言nsq源码解读八 http.go、http_server.go
  11. dubbo-admin 配置运行
  12. C++ 容器操作
  13. Stanford Corenlp学习笔记——词性标注
  14. 泡泡一分钟:A Multi-Position Joint Particle Filtering Method for Vehicle Localization in Urban Area
  15. bzoj3196 二逼平衡树
  16. 17. 判断是否IE浏览器
  17. Lintcode: Lowest Common Ancestor
  18. Python 编码问题(十四)
  19. strdup实现
  20. tiny4412 ubuntudesktop更新源(old)

热门文章

  1. Spring Boot学习——Spring Boot简介
  2. python脚本传递参数
  3. Android 项目提交到svn需要忽略的文件和文件夹
  4. AC日记——幸运号码 51nod 1043
  5. CSU 1997: Seating Arrangement【构造】
  6. oracle的锁与并发机制
  7. 实现一个Java五子棋
  8. protobuf3 语法解析
  9. org.apache.commons.io.Charsets
  10. Scut游戏服务器引擎6.5.8.6发布