多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > Oracle pl/sql編程之游標操作

Oracle pl/sql編程之游標操作

來源:程序員人生   發布時間:2016-04-12 10:28:10 閱讀次數:3679次

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


隱式游標

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

如果履行了1個select語句則可以通過SQL%ROWCONT來檢查受影響的行數,還可以通過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個重要的事項。游標的屬性信息總是反應最新的SQL語句處理結果。因此,當在1個程序塊中出現多個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返回的結果集。
begin for empcursor in(select * from emp) loop dbms_output.put_line(姓名:||empcursor.ename); end loop; end;

顯示游標

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

聲明游標


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

IS SELECT語句;

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

以上代碼定義1個名為emp_cursor的游標,并為其規定了輸入參數為‘v_name’,該參數為1個字符串數據類型,其默許值為‘SMITH



打開和關閉游標


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

關閉游標使得用戶不能再從查詢結果中檢索數據。使用完游標后應當馬上關閉游標,釋放select查詢結果。如果關閉上面定義的游標emp_cursor,可使用以下語句:
close emp_cursor;

檢索數據

檢索數據就是從檢索到的結果集中獲得數據保存到變量中,以遍在程序中進行處理。這4個操作步驟在程序中是順次進行的,即只有先聲明游標才能打開,1旦打開游標就可以從獲得數據,當不需要數據時就關閉游標
游標聲明中的select語句返回1組數據,open語句履行了select語句,close語句釋放select語句的查詢結果。而這1切工作都是為了從檢索數據
檢索數據使用fetch語句找出結果集中的單行,并從中提取單個值傳給主變量語法以下:
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循環


在pl/sql中還有1種更加方便的使用顯示游標的方法,那就是游標for循環,游標for循環是顯示游標的1種快捷方式,它使用for循環順次讀取結果集中的行數據,當for循環開始時游標自動打開(不需要使用open方法)每循環順次,系統自動讀取游標當前行的數據(不需要使用FETCH),當退出for循環時,游標自動關閉(不需要使用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;
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人卡通精品卡通动漫第一页 | 稀缺资源呦视频在线网站 | 日韩 国产 欧美视频一区二区三区 | 精品伊人久久久大香线蕉欧美 | 福利视频欧美一区二区三区 | 日本高清无卡码一区二区久久 | 99精品久久秒播无毒不卡 | 欧美日韩性猛交xxxxx免费看 | 爱爱客影院在线影院gf发现 | 午夜爽爽爽视频 | 伊人精品视频在线观看 | 亚洲欧美视频一级 | 五月婷视频 | japan高清日本乱xxxx | 97se亚洲综合在线 | 亚洲三级视频在线观看 | www一级黄色片 | 自拍偷拍欧美视频 | 日韩精品欧美精品中文精品 | 一区二区三区高清 | 最近中文字幕mv免费视频 | 国产性老妇女做爰在线 | 久草视频福利在线观看 | 国产三级日产三级 | 在线精品日韩一区二区三区 | 亚洲欧美校园 | 求免费黄色网址 | 亚洲欧美一 | 12306ys播播影院午夜 | 自拍亚洲欧美 | 国产精品久久久视频 | 亚洲色中文字幕在线播放 | 中文字幕最新中文字幕中文字幕 | 亚洲精品免费在线 | 亚洲精品www | 国产亚洲人成网站观看 | 欧美setu| 欧美成在线观看 | 亚洲图片偷拍自拍 | 92精品国产自产在线观看 | 伊人影院在线观看视频 |