亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle顯示游標的使用及游標for循環

2024-08-29 13:58:32
字體:
來源:轉載
供稿:網友

本篇文章給大家介紹oracle顯示游標的使用及游標for循環,當查詢返回單行記錄時使用隱式游標,查詢返回多行記錄并逐行進行處理時使用顯式游標,對本文感興趣的朋友一起學習吧

下面給大家介紹在什么情況下用隱式游標,什么情況下用顯示游標:

1.查詢返回單行記錄時→隱式游標;

2.查詢返回多行記錄并逐行進行處理時→顯式游標

--顯示游標屬性

 

 
  1. declare 
  2. CURSOR cur_emp IS SELECT * FROM emp; 
  3. row_emp cur_emp%ROWTYPE; 
  4. BEGIN 
  5. OPEN cur_emp; 
  6. FETCH cur_emp INTO row_emp; 
  7. WHILE cur_emp%FOUND 
  8. LOOP 
  9. dbms_output.put_line(row_emp.empno||'----'||row_emp.ename); 
  10. FETCH cur_emp INTO row_emp; 
  11. END LOOP; 
  12. close cur_emp; 
  13. END; 

--使用顯式游標修改數據(給所有的部門經理加薪1000)

 

 
  1. DECLARE 
  2. CURSOR emp_cur IS 
  3. SELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE; 
  4. emp_row emp_cur%ROWTYPE; 
  5. BEGIN 
  6. OPEN emp_cur; 
  7. LOOP 
  8. FETCH emp_cur INTO emp_row; 
  9. IF emp_cur%NOTFOUND THEN 
  10. EXIT; 
  11. ELSE 
  12. UPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur; 
  13. END IF; 
  14. END LOOP; 
  15. COMMIT; 
  16. CLOSE emp_cur; 
  17. END; 

·注意:

1、如果游標打開之前或關閉之后,使用游標屬性,Oracle會拋出一個INVALID_CURSOR錯誤(ORA-01001);

2、如果在第一次fetch后結果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0;

3、如果使用了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,實際上他返回的是提取到相關集合的行數。

--游標for循環(給所有的部門經理減薪1000)

 

 
  1. DECLARE 
  2. CURSOR emp_cur IS 
  3. SELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE; 
  4. BEGIN 
  5. FOR emp_row IN emp_cur 
  6. LOOP 
  7. UPDATE emp SET sal=sal-1000 WHERE CURRENT OF emp_cur; 
  8. END LOOP; 
  9. COMMIT; 
  10. END; 

--我們可以看到游標FOR循環確實很好的簡化了游標的開發,我們不在需要open、fetch和close語句,不在需要用%FOUND屬性檢測是否到最后一條記錄,這一切Oracle隱式的幫我們完成了。

--給經理加薪5000,其他加薪1000

 

 
  1. DECLARE 
  2. CURSOR emp_cur IS 
  3. SELECT * FROM emp FOR UPDATE; 
  4. BEGIN 
  5. FOR emp_row IN emp_cur 
  6. LOOP 
  7. IF emp_row.job='MANAGER' THEN 
  8. UPDATE emp SET sal=sal+5000 WHERE CURRENT OF emp_cur; 
  9. ELSE 
  10. UPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur; 
  11. END IF; 
  12. END LOOP; 
  13. END; 

下面給大家介紹oracle游標cursor簡單使用

總共介紹兩種游標一種高效使用游標cursor 、sys_refcursor 、 bulk collect

1、cursor游標使用

 

 
  1. /*簡單cursor游標  
  2. *students表里面有name字段,你可以換做其他表測試  
  3. */  
  4. --定義  
  5. declare 
  6. --定義游標并且賦值(is 不能和cursor分開使用)  
  7. cursor stus_cur is select * from students;  
  8. --定義rowtype  
  9. cur_stu students%rowtype;  
  10. /*開始執行*/  
  11. begin 
  12. --開啟游標  
  13. open stus_cur;  
  14. --loop循環  
  15. loop  
  16. --循環條件  
  17. exit when stus_cur%notfound;  
  18. --游標值賦值到rowtype  
  19. fetch stus_cur into cur_stu;  
  20. --輸出  
  21. dbms_output.put_line(cur_stu.name);  
  22. --結束循環  
  23. end loop;  
  24. --關閉游標  
  25. close stus_cur;  
  26. /*結束執行*/  
  27. end; 

執行結果

 

 
  1. SQL> declare 
  2. --定義游標并且賦值(is 不能和cursor分開使用)  
  3. cursor stus_cur is select * from students;  
  4. --定義rowtype  
  5. cur_stu students%rowtype;  
  6. /*開始執行*/  
  7. begin 
  8. --開啟游標  
  9. open stus_cur;  
  10. --loop循環  
  11. loop  
  12. --循環條件  
  13. exit when stus_cur%notfound;  
  14. --游標值賦值到rowtype  
  15. fetch stus_cur into cur_stu;  
  16. --輸出  
  17. dbms_output.put_line(cur_stu.name);  
  18. --結束循環  
  19. end loop;  
  20. --關閉游標  
  21. close stus_cur;  
  22. /*結束執行*/  
  23. end;  
  24. /  
  25.  
  26. 楊過  
  27. 郭靖  
  28. 付政委  
  29. 劉自飛  
  30. 江風  
  31. 任我行  
  32. 任盈盈  
  33. 令狐沖  
  34. 韋一笑  
  35. 張無忌  
  36. 朵兒  
  37. 謝遜  
  38. 小龍女  
  39. 歐陽鋒  
  40. 歐陽鋒 

2、sys_refcursor游標使用

 

 
  1. /*  
  2. *游標名:sys_refcursor  
  3. *特別注意賦值方式:for 
  4. *與上重復內容不在敘述  
  5. */  
  6. declare 
  7. stu_cur sys_refcursor;  
  8. stuone students%rowtype;  
  9.  
  10. begin 
  11. --這句賦值方式for  
  12. open stu_cur for select * from students;  
  13. --fetch賦值給rowtype  
  14. fetch stu_cur into stuone;  
  15.  
  16. loop  
  17. dbms_output.put_line(stuone.name||' '||stuone.hobby);  
  18. fetch stu_cur into stuone;  
  19. exit when stu_cur%notfound;  
  20. end loop;  
  21. end; 

執行結果

 

 
  1. SQL> /*  
  2. *游標名:sys_refcursor  
  3. *特別注意賦值方式:for 
  4. *與上重復內容不在敘述  
  5. */  
  6. declare 
  7. stu_cur sys_refcursor;  
  8. stuone students%rowtype;  
  9. begin 
  10. --這句賦值方式for  
  11. open stu_cur for select * from students;  
  12. --fetch賦值給rowtype  
  13. fetch stu_cur into stuone;  
  14. loop  
  15. dbms_output.put_line(stuone.name||' '||stuone.hobby);  
  16. fetch stu_cur into stuone;  
  17. exit when stu_cur%notfound;  
  18. end loop;  
  19. end;  
  20. /  
  21. 楊過 保護小龍女  
  22. 郭靖 修煉降龍十八掌  
  23. 付政委 看小人書  
  24. 劉自飛 編程寫代碼  
  25. 江風 編程寫代碼  
  26. 任我行 修煉神功  
  27. 任盈盈 游山玩水  
  28. 令狐沖 行俠仗義  
  29. 韋一笑 吸拾人雪  
  30. 張無忌 修行  
  31. 朵兒 洗浴  
  32. 謝遜 畢生研究屠龍刀  
  33. 小龍女 修煉玉女心經  
  34. 歐陽鋒 看小人書 

補充一種循環條件

 

 
  1. declare 
  2. stu_cur sys_refcursor;  
  3. stuone students%rowtype;  
  4. begin 
  5. open stu_cur for select * from students;  
  6. fetch stu_cur into stuone;  
  7. --特別注意循環條件的改變  
  8. --這個條件是發現了在循環  
  9. --與上一個notfound不同的  
  10. while stu_cur%found loop  
  11. dbms_output.put_line(stuone.name||' '||stuone.hobby);  
  12. fetch stu_cur into stuone;  
  13. end loop;  
  14. end; 

--普通的fetch into

 

 
  1. /*普通方式*/  
  2. declare 
  3. cursor myemp_cur is select * from myemp;  
  4. v_myemp myemp%rowtype;  
  5. begin 
  6. open myemp_cur;  
  7. fetch myemp_cur into v_myemp;  
  8. while myemp_cur%found loop  
  9. dbms_output.put_line(v_myemp.ename);  
  10. fetch myemp_cur into v_myemp;  
  11. end loop;  
  12. end; 

--高效的bulk collect

 

 
  1. /*高效bulk collect for*/  
  2. declare 
  3. cursor myemp_cur  
  4. is select * from myemp;  
  5. type myemp_tab is table of myemp%rowtype;  
  6. myemp_rd myemp_tab;  
  7. begin 
  8. open myemp_cur;  
  9. loop  
  10. fetch myemp_cur bulk collect into myemp_rd limit 20;  
  11. for i in 1..myemp_rd.count loop  
  12. dbms_output.put_line('姓名:'||myemp_rd(i).ename);  
  13. end loop;  
  14. exit when myemp_cur%notfound;  
  15. end loop;  
  16. end; 


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一天堂av| 久久伊人91精品综合网站| 欧美午夜www高清视频| 亚洲一区亚洲二区亚洲三区| 96精品久久久久中文字幕| 一区三区二区视频| 国产亚洲精品综合一区91| 色爱av美腿丝袜综合粉嫩av| 26uuu久久噜噜噜噜| 日韩精品免费看| 国产精品流白浆视频| 日韩欧美aⅴ综合网站发布| 91精品视频一区| 色婷婷综合成人av| 国产免费一区二区三区在线观看| 精品国产乱码久久久久久天美| 97色在线观看免费视频| 91网站在线免费观看| 97久久精品国产| 91精品国产高清自在线看超| 久久伊人精品视频| 亚洲欧美国产精品专区久久| 国产精品久久久久久av福利软件| 97av在线影院| 亚洲精品动漫久久久久| 国内精品伊人久久| 久久久精品网站| 久精品免费视频| 高清一区二区三区日本久| 久久久久免费精品国产| 欧美美最猛性xxxxxx| 97色在线观看| 亚洲午夜色婷婷在线| www.日韩免费| 7m第一福利500精品视频| 欧美丰满少妇xxxxx做受| 成人精品一区二区三区电影免费| 国产精品av免费在线观看| 在线观看欧美日韩| 日韩av一区二区在线观看| 97国产suv精品一区二区62| 在线日韩第一页| 精品一区二区三区电影| 欧美大片免费观看在线观看网站推荐| 国产欧美在线观看| 国产日韩av在线播放| 久久伊人精品视频| 亚洲一区二区三区成人在线视频精品| 国产精品丝袜一区二区三区| 久久精品99无色码中文字幕| 日韩福利在线播放| 2019亚洲日韩新视频| 日韩精品在线免费观看视频| 欧美激情国产日韩精品一区18| 亚洲国产99精品国自产| 成年无码av片在线| 欧美激情亚洲另类| 久久久女女女女999久久| 亚洲精品理论电影| 亚洲高清不卡av| 这里只有视频精品| 亚洲欧美一区二区三区在线| 欧美极品少妇xxxxⅹ免费视频| 国产精品一区二区在线| 亚洲综合成人婷婷小说| 欧美人与性动交| 日韩av第一页| 欧美日韩亚洲精品内裤| 亚洲欧美999| 2019中文字幕在线免费观看| 91tv亚洲精品香蕉国产一区7ujn| 欧美小视频在线| 色综合导航网站| 亚洲欧美在线播放| 欧美疯狂xxxx大交乱88av| 日韩三级影视基地| 欧美一级高清免费播放| 欧美性开放视频| 日日狠狠久久偷偷四色综合免费| 国产69久久精品成人看| 狠狠色狠狠色综合日日五| 色综合视频网站| 精品视频www| 欧美国产在线电影| 亚洲国产日韩欧美在线图片| 久久久久这里只有精品| 亚洲国产成人爱av在线播放| 久久亚洲精品一区二区| 精品一区二区三区四区| 懂色av影视一区二区三区| 国产精品露脸自拍| 欧美黑人狂野猛交老妇| 久久天天躁狠狠躁夜夜av| 精品国产乱码久久久久久虫虫漫画| 青青青国产精品一区二区| 亚洲精品一区二区久| 国产va免费精品高清在线| 久久精品亚洲精品| 亚洲人成网站999久久久综合| 久久精品视频网站| 国产做受高潮69| xxxx欧美18另类的高清| 精品国产一区av| 中文字幕日韩欧美| 成人网在线观看| 亚洲精品狠狠操| 97超级碰碰碰| 欧美激情欧美激情在线五月| 69视频在线免费观看| 日韩成人在线观看| 欧美乱大交xxxxx另类电影| 伊人亚洲福利一区二区三区| 久久av在线播放| 大荫蒂欧美视频另类xxxx| 国产精品网站视频| 91精品在线一区| 亚洲影院色在线观看免费| 色系列之999| 国产色婷婷国产综合在线理论片a| 日韩欧美在线中文字幕| 在线观看国产精品淫| 欧美大奶子在线| 国产精品高潮呻吟视频| 欧日韩不卡在线视频| 欧美激情视频免费观看| 国产精品99久久久久久www| 久久久久久久国产精品视频| 97国产suv精品一区二区62| 69av在线视频| 国产va免费精品高清在线观看| 欧美日韩国产精品专区| 精品性高朝久久久久久久| 欧美理论电影在线观看| 精品magnet| 成人在线观看视频网站| 亚洲伊人久久综合| 日韩中文字幕在线观看| 欧美性开放视频| 亚洲天堂一区二区三区| 亚洲视频在线看| 国产亚洲一区二区在线| 国产精品偷伦视频免费观看国产| 2019中文字幕全在线观看| 亚洲精品福利资源站| 欧美成人性生活| 久久精品色欧美aⅴ一区二区| 国产精品国模在线| 欧美日韩国产一区二区三区| 欧美激情a在线| 性亚洲最疯狂xxxx高清| 亚洲少妇中文在线| 国产视频精品免费播放| 日韩69视频在线观看| 九九精品视频在线观看| 欧美激情在线狂野欧美精品| 一本色道久久88综合日韩精品| 亚洲国产日韩精品在线| 国产这里只有精品| 在线a欧美视频| 欧美性猛交xxxxx免费看| 成人午夜黄色影院| 日本国产欧美一区二区三区| 亚洲国语精品自产拍在线观看| 亚洲国产中文字幕久久网|