游標(biāo) Oracle

游標(biāo)

PL/SQL 的游標(biāo)是指把從數(shù)據(jù)庫中查詢出來的數(shù)據(jù)以臨時表的形式存放內(nèi)中,游標(biāo)可以對存放在內(nèi)      存中的數(shù)據(jù)進(jìn)行操作掷邦,返回一條或一組記錄,或者一條也不返回
  pl/sql 中的記錄和表類型雖然可以存儲數(shù)據(jù)

游標(biāo)的基本操作:
pl/sql 包含隱士游標(biāo)和顯示游標(biāo)
1. 定義游標(biāo)
    cursor cursor_name is select....
2. 打開游標(biāo)
open cursor_name;
3. 提取游標(biāo)
fetch cursor_name into variable1,variable2.....
4. 關(guān)閉游標(biāo)
    close cursor_name

    cursor cursor_name is select...
        cursor : 游標(biāo)關(guān)鍵字
        cursor_name : 游標(biāo)名稱
        select.. : 建立游標(biāo)所使用的查詢語句

declare
--1.定義游標(biāo)
/*
cursor c_dept is select * from dept;
/
cursor c_dept is select deptno,dname from dept;
v_dname dept.dname% type;
v_dno dept.deptno%type;
v_dept dept%rowtype;
begin
--2. 打開游標(biāo)
open c_dept;
--3. 提取游標(biāo)
loop
/

fetch c_dept into v_dept;
dbms_output.put_line(v_dept.dname||' '||v_dept.loc);
*/
fetch c_dept into v_dno,v_dname;
dbms_output.put_line(v_dname||' '|| v_dno);
exit when c_dept%notfound;
end loop;
--4. 關(guān)閉游標(biāo)
close c_dept;
end;

游標(biāo)屬性

游標(biāo)作為一個臨時表箱沦,可以通過游標(biāo)的屬性獲取游標(biāo)的狀態(tài)
    1. %isopen 屬性主要用于判斷游標(biāo)是否打開,在使用游標(biāo)的時候如果不能確定是否已打開可以判斷使用(為打開游標(biāo)不可提茸锕)
    2. %found  屬性主要用于判斷游標(biāo)是否找到記錄,如果找到記錄用fetch語句提取游標(biāo)數(shù)據(jù)
3. %notfound 如果提取到數(shù)據(jù)返回false否則返回true和%found正好相反
    4. %rowcount  該屬性用于返回到當(dāng)前提取的實(shí)際行數(shù)

declare 
   cursor emp_cursor(dno number) is select ename from emp where deptno = dno;
   v_name emp.ename%type;

begin
open emp_cursor(20);
loop
fetch emp_cursor into v_name;
dbms_output.put_line(v_name);
exit when emp_cursor%notfound;
end loop ;
close emp_cursor;

dbms_output.put_line('-------------');
open emp_cursor(10);
loop
fetch emp_cursor into v_name;
dbms_output.put_line(v_name);
exit when emp_cursor%notfound;
end loop ;
close emp_cursor;
end;

參數(shù)化游標(biāo)

定義游標(biāo)后,使用后再傳參
cursor cursor_name(paramter) is select....

-- Created on 2019-09-04 by LINNE 
declare 
  cursor emp_cursor(dno number) is select ename from emp where deptno = dno;

  v_ename emp.ename%type;

begin
  -- Test statements here
  open emp_cursor(20);
  loop
    fetch emp_cursor into v_ename;
    dbms_output.put_line(v_ename);
    exit when emp_cursor%notfound;
  end loop;
  close emp_cursor;

   dbms_output.put_line('---------------------------------');

  open emp_cursor(10);
  loop
    fetch emp_cursor into v_ename;
    dbms_output.put_line(v_ename);
    exit when emp_cursor%notfound;
  end loop;
  close emp_cursor;
end;

游標(biāo)for循環(huán)

游標(biāo)for循環(huán)是在pl/sql 塊中使用游標(biāo)最簡單的方式饱普,簡化了游標(biāo)的處理,Oracle會隱含的打開游標(biāo)状共,提取游標(biāo)套耕,關(guān)閉游標(biāo)
for record in cursor_name loop
        .....
    end loop;
declare

 cursor c_dept(dno number) is select * from dept where deptno = dno;

begin

 for v_dept in c_dept(20) loop
   dbms_output.put_line('第'||c_dept%rowcount||'個員工'||v_dept.dname);
 end loop;
end;

隱式游標(biāo)

在執(zhí)行一個SQL語句的時候,Oracle服務(wù)器將自動創(chuàng)建一個隱式游標(biāo).隱式游標(biāo)的固定名稱 SQL,隱式游標(biāo)不需要聲明和打開.使用完也不需要關(guān)閉.
隱式游標(biāo)只能處理一行數(shù)據(jù),所以into只能給一組變量賦值!
操作游標(biāo)(游標(biāo)的刪除和修改)
存儲過程
函數(shù)
包
觸發(fā)器
序列##  ##
同義詞
視圖
索引
備份和恢復(fù)
審計(jì)/數(shù)據(jù)庫的數(shù)據(jù)加密/數(shù)據(jù)加載/數(shù)據(jù)傳輸/閃回..../日志恢復(fù)..

除了可以一行一行展示select結(jié)構(gòu)外,還可以更新或刪除峡继,當(dāng)前游標(biāo)行數(shù)據(jù)冯袍,如果需  要對游標(biāo)中的行數(shù)據(jù)進(jìn)行修改或刪除,在定義游標(biāo)的時候必須攜帶for update 字句
cursor cursor_name is select .....for update

declare
cursor emp_cursor is select ename, sal ,deptno from emp for update;
v_ename emp.ename%type;
v_sal emp.sal%type;
v_deptno emp.deptno%type;
begin
  open emp_cursor;
loop 
  fetch emp_cursor into v_ename,v_sal,v_deptno;
  exit when emp_cursor%notfound;
 -- dbms_output.put_line(deptno||v_ename||v_sal); 
  update emp set deptno = deptno+ 10 where current of emp_cursor;        
end loop;
close emp_cursor;
end;
--select * from emp

declare 
  type emp_type is ref cursor return emp%rowtype;
  v_emp emp_type;
  rec_emp emp%rowtype;

begin
open v_emp for select * from emp;
loop
fetch v_emp into rec_emp;  
exit when v_emp%notfound;
dbms_output.put_line(rec_emp.ename);

end loop;
close v_emp;
dbms_output.put_line('-----------------------');

open v_emp for select * from emp order by deptno;
loop
  fetch v_emp into rec_emp;
exit when v_emp%notfound;
dbms_output.put_line(rec_emp.ename);
end loop;
close v_emp;
end;

</article>

0人點(diǎn)贊

隨筆

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碾牌,一起剝皮案震驚了整個濱河市康愤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舶吗,老刑警劉巖征冷,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異誓琼,居然都是意外死亡检激,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門腹侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叔收,“玉大人,你說我怎么就攤上這事傲隶〗嚷桑” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵跺株,是天一觀的道長复濒。 經(jīng)常有香客問我脖卖,道長,這世上最難降的妖魔是什么巧颈? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任胚嘲,我火速辦了婚禮,結(jié)果婚禮上洛二,老公的妹妹穿的比我還像新娘。我一直安慰自己攻锰,他們只是感情好晾嘶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娶吞,像睡著了一般垒迂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妒蛇,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天机断,我揣著相機(jī)與錄音,去河邊找鬼绣夺。 笑死吏奸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陶耍。 我是一名探鬼主播奋蔚,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烈钞!你這毒婦竟也來了泊碑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤毯欣,失蹤者是張志新(化名)和其女友劉穎馒过,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酗钞,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腹忽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了算吩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留凭。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偎巢,靈堂內(nèi)的尸體忽然破棺而出蔼夜,到底是詐尸還是另有隱情,我是刑警寧澤压昼,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布求冷,位于F島的核電站瘤运,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏匠题。R本人自食惡果不足惜拯坟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韭山。 院中可真熱鬧郁季,春花似錦、人聲如沸钱磅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盖淡。三九已至年柠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褪迟,已是汗流浹背冗恨。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留味赃,地道東北人掀抹。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像洁桌,于是被迫代替她去往敵國和親渴丸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號usernam...
    落葉寂聊閱讀 1,072評論 0 0
  • pl/sql : PL/SQL 是Oracle在標(biāo)準(zhǔn)法人SQL語句上的過程性擴(kuò)展另凌。PL/SQL 不僅允許嵌入SQL...
    依戀_d554閱讀 254評論 0 0
  • 在 PL/SQL 程序中谱轨,對于處理多行記錄的事務(wù)經(jīng)常使用游標(biāo)來實(shí)現(xiàn)。 游標(biāo)概念 為了處理 SQL 語句吠谢,ORACL...
    遼A丶孫悟空閱讀 530評論 0 15
  • 人生有喜有悲土童,總有不愉快的事情發(fā)生 那有真的這么巧妙,老爸年過八十五歲工坊,本 身體健康献汗,走路平穩(wěn),有點(diǎn)高壓病王污,活著當(dāng)...
    殷照紅閱讀 940評論 18 38
  • 非常榮幸能有機(jī)會到二實(shí)驗(yàn)參加國培罢吃,聽著老師們一句句感人肺腑的經(jīng)歷,艱難抉擇之后成為師者昭齐,為人師后不言辛苦尿招,勇于創(chuàng)新...
    zzzzzz趙貝貝閱讀 77評論 0 0