日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 數(shù)據(jù)庫 > 數(shù)據(jù)庫應(yīng)用 > Oracle pl/sql編程之游標操作

Oracle pl/sql編程之游標操作

來源:程序員人生   發(fā)布時間:2016-04-12 10:28:10 閱讀次數(shù):3686次

在通過select語句查詢是,返回的結(jié)果通常是多行記錄組成的集合。為此SQL提供了游標機制。游標可以充當指針的作用,使利用程序設(shè)計語言1次只能處理查詢記過中的1行。在Oracle中,可使用隱式和顯示兩種游標。在pl/sql中程序所有發(fā)出的DML和select語句,Oracle都會自動聲明“隱式游標”。為了處理由select語句返回的1組記錄,需要在pl/sql程序中申明和處理“顯示游標”。


隱式游標

游標的主要屬性以下:
%found 布爾型屬性,如果SQL語句最少影響1行,則為true,否則為false
%notfound 布爾型屬性,與%found相反
%isopen 布爾型屬性,當游標已打開時返回true,游標關(guān)閉為false
%rowcount 數(shù)字型屬性,返回受sql語句影響的行數(shù)

如果履行了1個select語句則可以通過SQL%ROWCONT來檢查受影響的行數(shù),還可以通過SQL%FOUND屬性值是不是為true,以檢查SQL語句是不是影響到了任何行。

begin update emp set sal=850 where ename=SMITH; if sql%notfound then dbms_output.put_line(未更行任何記錄); else dbms_output.put_line(更新記錄||sql%rowcount||條); end if; end;


在使用游標的屬性值時,需要注意1個重要的事項。游標的屬性信息總是反應(yīng)最新的SQL語句處理結(jié)果。因此,當在1個程序塊中出現(xiàn)多個sql語句時,需要斟酌在何處檢查屬性值

declare emp_row emp%rowtype; begin update emp set sal=1800 where ename=SMITH; dbms_output.put_line(更新||sql%rowcount||條記錄); select * into emp_row from emp where ename=SMITH; dbms_output.put_line(檢索到||sql%rowcount||條記錄); end;

另外一種情勢的隱式游標是cursor for loop,可以用于處理sql返回的結(jié)果集。
begin for empcursor in(select * from emp) loop dbms_output.put_line(姓名:||empcursor.ename); end loop; end;

顯示游標

顯示游標是在pl/sql程序中使用包括select語句來聲明的游標。如果需要處理從數(shù)據(jù)庫中檢索的1組記錄,則可使用顯示游標。使用顯示游標處理數(shù)據(jù)需要4個PL/SQL步驟
聲明游標,打開游標,檢索數(shù)據(jù)和關(guān)閉游標

聲明游標


CURSOR 游標名[(參數(shù)數(shù)據(jù)類型[參數(shù)數(shù)據(jù)類型...])]

IS SELECT語句;

declare cursor emp_cursor(v_name in varchar2 default SMITH) is select * from emp where ename=v_name;

以上代碼定義1個名為emp_cursor的游標,并為其規(guī)定了輸入?yún)?shù)為‘v_name’,該參數(shù)為1個字符串數(shù)據(jù)類型,其默許值為‘SMITH



打開和關(guān)閉游標


打開游標就是履行聲明游標所指定的查詢語句。游標必須聲明后才能打開,打開游標也就是調(diào)用游標中的select語句。打開游標的進程非常簡單,只需要使用關(guān)鍵字OPEN并指定打開的游標名及傳遞的參數(shù)值
open 游標名[(參數(shù)數(shù)據(jù)類型[參數(shù)數(shù)據(jù)類型...])];
 例如,要打開上面聲明的游標emp_cursor,可使用以下代碼:
open emp_cursor;
如果履行該語句,其輸入的參數(shù)就是默許值,將會把SMITH的信息查詢出來,如果要查KING 的信息
open emp_cursor(KING );

關(guān)閉游標使得用戶不能再從查詢結(jié)果中檢索數(shù)據(jù)。使用完游標后應(yīng)當馬上關(guān)閉游標,釋放select查詢結(jié)果。如果關(guān)閉上面定義的游標emp_cursor,可使用以下語句:
close emp_cursor;

檢索數(shù)據(jù)

檢索數(shù)據(jù)就是從檢索到的結(jié)果集中獲得數(shù)據(jù)保存到變量中,以遍在程序中進行處理。這4個操作步驟在程序中是順次進行的,即只有先聲明游標才能打開,1旦打開游標就可以從獲得數(shù)據(jù),當不需要數(shù)據(jù)時就關(guān)閉游標
游標聲明中的select語句返回1組數(shù)據(jù),open語句履行了select語句,close語句釋放select語句的查詢結(jié)果。而這1切工作都是為了從檢索數(shù)據(jù)
檢索數(shù)據(jù)使用fetch語句找出結(jié)果集中的單行,并從中提取單個值傳給主變量語法以下:
fetch cursor_name into {variable_list|recod_variable};

列子:
declare cursor emp_cursor(v_deptno in number) is select * from emp where deptno=v_deptno; type cursor_result is record( cursor_result_empno emp.empno%type, cursor_result_ename emp.ename%type, cursor_result_job emp.job%type, cursor_result_mgr emp.mgr%type, cursor_result_hiredate emp.hiredate%type, cursor_result_sal emp.sal%type, cursor_result_comm emp.comm%type, cursor_result_deptno emp.deptno%type ); v_cursor_result cursor_result; begin open emp_cursor(10); LOOP FETCH emp_cursor into v_cursor_result; exit when emp_cursor%notfound; dbms_output.put_line(v_cursor_result.cursor_result_empno); dbms_output.put_line(v_cursor_result.cursor_result_ename); dbms_output.put_line(v_cursor_result.cursor_result_job); dbms_output.put_line(v_cursor_result.cursor_result_mgr); dbms_output.put_line(v_cursor_result.cursor_result_hiredate); dbms_output.put_line(v_cursor_result.cursor_result_sal); dbms_output.put_line(v_cursor_result.cursor_result_comm); dbms_output.put_line(v_cursor_result.cursor_result_deptno); dbms_output.put_line(========================================); end loop; close emp_cursor; end;

游標for循環(huán)


在pl/sql中還有1種更加方便的使用顯示游標的方法,那就是游標for循環(huán),游標for循環(huán)是顯示游標的1種快捷方式,它使用for循環(huán)順次讀取結(jié)果集中的行數(shù)據(jù),當for循環(huán)開始時游標自動打開(不需要使用open方法)每循環(huán)順次,系統(tǒng)自動讀取游標當前行的數(shù)據(jù)(不需要使用FETCH),當退出for循環(huán)時,游標自動關(guān)閉(不需要使用close)

declare cursor emp_cursor(v_deptno in number default 10) is select * from emp where deptno=v_deptno; begin for r in emp_cursor loop dbms_output.put_line(r.empno); dbms_output.put_line(r.ename); dbms_output.put_line(r.job); dbms_output.put_line(r.mgr); dbms_output.put_line(r.hiredate); dbms_output.put_line(r.sal); dbms_output.put_line(r.comm); dbms_output.put_line(r.deptno); dbms_output.put_line(========================================); end loop; end;
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲精彩视频在线观看 | 亚洲精品久久久一区二区三区 | 久久久久久久久久久网站 | 日韩毛片免费视频一级特黄 | www五月天| 精品国产91亚洲一区二区三区www | 在线播放一区二区三区 | 国产一区二区三区免费在线观看 | 色婷婷综合成人 | 免费网站成人 | 日韩视频在线免费观看 | 久久久首页 | 天堂网2017| 成人久久 | 精品在线一区二区 | 亚洲激情自拍偷拍 | 人人九九精品 | 99久久免费精品视频 | 国产成人精品在线观看 | 欧洲久久久 | 日韩av一区二区在线观看 | 一区二区三区精品视频 | 久久国产精品久久 | 久久99深爱久久99精品 | 亚洲欧美中文日韩在线v日本 | 国产午夜精品久久久 | 亚洲精品美女久久久 | 99精品一区二区三区 | 免费成人高清在线视频 | 91视频国产高清 | 亚洲国产高清视频 | 国产在线一区二区 | 欧美麻豆 | 欧美xxxx在线 | 在线成人www免费观看视频 | 午夜精品美女久久久久av福利 | 美女毛片在线看 | 青草一区二区 | 国产视频在线播放 | 久久精品久久久久电影 | 国产精品久久久久桃色tv |