分类目录

链接

2012 年 1 月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > MySQL, SQL Server > 正文
游标的使用方法和效率
MySQL, SQL Server 评论(1) 阅读(3,005)

 

  1. 重点:游标对于大数据量是低效率的  
  2.   
  3. 重点:  
  4. 1、  游标的属性  
  5. 2、  Current of cursor 游标的当前记录  
  6.   
  7.   
  8. 1.  游标:游标是select之后的结果集。我们可以借助游标将结果集每一条赋值到结果集中,  
  9. 然后对数据进行逐条控制  
  10. 2.  游标的属性解析  
  11. 2.1.    %FOUND : 布尔型的判断,有数据可取为true,没有则为false   
  12. 2.2.    %NOTFOUND:与found正好相反  
  13. 2.3.    %ISOPEN:判断是否已经打开游标  
  14. 2.4.    ROWCOUNT:判断游标内的数据有多少条  
  15.   
  16. 1、游标应用的案例  
  17. declare  
  18. cursor mycur is select * from dept;  --定义游标  
  19. myrec dept%rowtype;       --定义复合变量  
  20. begin  
  21. open mycur;               --打开游标,拿出来  
  22. fetch mycur into myrec;   --将游标赋值给变量  
  23. while mycur%found loop    --用游标的%found属性返回布尔值判断做循环输出  
  24. dbms_output.put_line('myrec.did'||myrec.did);  
  25. dbms_output.put_line('myrec.dname'||myrec.dname);  
  26. fetch mycur into myrec;   --循环体内输出  
  27. end loop;  
  28. end;  
  29. /  
  30.   
  31. 2、游标传参的案例  
  32. declare  
  33. cursor mycur(id varchar2) is    --定义游标  
  34. select dname from dept where did=id; --这里的ID应用的是游标里面定义的ID  
  35. name dept.dname%type;    --定义存储结果的变量  
  36. begin  
  37. open mycur('01');        --打开游标,相当于把参数传递进去了  
  38. fetch mycur into name;   --将游标的值赋给变量  
  39. dbms_output.put_line(name);  
  40. if mycur%isopen then     --游标的属性isopen的应用  
  41. dbms_output.put_line('游标已经打开');  
  42. end if;  
  43. end;  
  44. /  
  45.   
  46. 3、current of mycur的应用,判断到游标所在的当前行。并且用游标更新数据  
  47. declare  
  48. cursor mycur is   
  49. select dname from dept for update;  --这里加上for update是锁定用来更新数据的游标。  
  50. name dept.dname%type;  
  51. begin  
  52. open mycur;  
  53. fetch mycur into name;  
  54. while mycur%found loop    --条件 while loop  
  55. dbms_output.put_line('aaa');  
  56. update dept set dname='部门aa' where CURRENT of mycur;   
  57. --关键所在,运用了current of mycur做where条件意思是说。判断游标所在的当前行  
  58. fetch mycur into name;   
  59. end loop;  
  60. close mycur;  
  61. end;  
  62. /  
  63.   
  64.   
  65. 重:隐士游标不需要声明不需要打开和关闭  
  66. 隐士游标的案例:  
  67. begin  
  68. for cur in(select dname from dept) loop  
  69. dbms_output.put_line(cur.dname);  
  70. end loop;  
  71. end;  
  72. /  

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:游标的使用方法和效率 | Bruce's Blog

游标的使用方法和效率:目前有1 条留言

  1. 12334 : 2012年01月15日下午 1:05 回复

    hehe~~

发表评论

留言无头像?