Oracle的循环和Corsor
来源:互联网 发布:不交押金的网络兼职 编辑:程序博客网 时间:2024/05/18 03:09
这两天啊有一个心的业务,是需要如果我批量修改数据的话,那么另一张表的数据也需要修改,也是多条的修改,发现这个问题的时候,自然而然的想到了触发器,但是以前都是简单的单条语句的跟新,没有过整个表的去做一个触发器,今天学习了一下数据库中的循环,这里写一下。 在写触发器的时候用到了一个循环和一个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...一样,游标大家把他当作是一个表就可以,只不过这个游标还是指向咱们查询出来表的第一行。
- Oracle的循环和Corsor
- Oracle和MSSQL中循环的使用
- Oracle和MSSQL中循环的使用
- Oracle数据库的导出导入和循环
- oracle循环和过程
- Oracle的循环控制
- ORACLE存储过程的游标和for循环
- oracle中跳出循环结构的exit,continue和return
- oracle的循环几个实例
- Oracle 常用的循环小结
- oracle的for循环实例
- 看!oracle 的循环LOOP
- oracle的双重for循环
- Oracle中的for和while循环
- Oracle中的for和while循环
- Oracle中的for和while循环
- Oracle中的for和while循环
- oracle判断和循环语句语法
- Reorder List
- AndroidStudio ADB 启动失败
- pat(A)3-09. 队列中的元素排序(优先队列)
- HDUOJ_1596(find the safest road)(dijkstra)
- 解题报告 之 HDU5301 Buildings
- Oracle的循环和Corsor
- leetcode 细节实现题
- poj1493 Machined Surfaces
- HD 2544 最短路 【dijkstra】 (模板题)
- 多模卫星导航接收机
- 华为面试经验
- SQL Case when 的使用方法
- HD 1874 畅通工程续 【dijkstra】
- 外接圆、内切圆半径公式及对应关系知识点总结