oracle or 循环 查询,Oracle的循环和Corsor
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分公司不独立核算怎么报税 分公司不独立核
- 下一篇: 在线office文档编辑NTKO使用心得