pl sql游标简单例子学习

  1. oralce plsql编程的游标  
  2.   
  3. 游标分类  
  4. 1显示游标  
  5. 2隐式游标  
  6.   
  7. 隐式游标,oracle自动管理,不用声明,打开和关闭,ORACLE自动处理,使用隐式游标%FOUND时,需要加上  SQL%FOUND  
  8. 显示游标,需要自己声明,打开和关闭,使用%ROWCOUNT属性时,需要在前面加上游标名字 ,student_cur%ROWCOUNT  
  9.   
  10. 2声明游标  
  11. CURSOR cursor_name is select_statments;  
  12. 打开游标  
  13. open cursor_name  
  14. 读取数据  
  15. fetch cursor_name into variable_name,....variable_namen;  
  16. 关闭游标  
  17. close cursor_name;  
  18.   
  19. 3游标属性  
  20. %ISOPEN  
  21.   
  22. %FOUND  
  23.   
  24. %NOTFOUND  
  25.   
  26. %ROWCOUNT  
  27.   
  28. 4游标读取数据实例  
  29. select * from students;  
  30. set serveroutput on;  
  31.   
  32. declare  
  33.     v_specialty students.specialty%type;  
  34.     v_sname  students.name%type;  
  35.     v_dob    students.dob%type;  
  36.     cursor  students_cur   --声明游标  
  37.     is  
  38.     select name ,dob from students where specialty=v_specialty; --游标体  
  39. begin  
  40.   v_specialty:='&specialty';  
  41.   open students_cur;  --打开游标  
  42.   dbms_output.put_line('学生姓名   出生日期');  
  43.   loop  
  44.         fetch students_cur into v_sname,v_dob ; --读取游标的数据  
  45.         exit when students_cur%NOTFOUND;        --假如没有数据那么退出  
  46.         DBMS_OUTPUT.PUT_LINE(v_sname||'         '||v_dob);  
  47.   end loop;  
  48.   close students_cur;   --关闭游标  
  49.  end;  
  50.    
  51.   
  52. 5根据游标修改当前行数据,语法 update tablename set ....where current of cursor_name;  
  53. select * from teachers;  
  54. declare  
  55.         v_title teachers.title%TYPE;  
  56.         CURSOR  teachers_cur  
  57.         is   
  58.             select title from teachers for update;  
  59.     begin  
  60.             open teachers_cur;  
  61.             loop  
  62.                  fetch teachers_cur into v_title ;  
  63.                  exit when teachers_cur%NOTFOUND;  
  64.                  case  
  65.                         when v_title='教授' then  
  66.                             update teachers set wage=1.1*wage where current of teachers_cur;  
  67.                         when v_title='高工' or v_title='副教授' then  
  68.                           update teachers set wage=1.1*wage where current of teachers_cur;  
  69.                         else  
  70.                           update teachers set wage=wage+100 where current of teachers_cur;  
  71.                     end case;  
  72.             end loop;  
  73.             close teachers_cur;  
  74.             commit;  
  75.               
  76.     end;  
  77.   
  78. 6根据游标删除当前数据 delete from table where current of cursor_name;  
  79.    
  80. select * from students;  
  81. declare  
  82.         v_specialty students.specialty%TYPE;  
  83.         v_sname students.name%TYPE;  
  84.         CURSOR  students_cur  
  85.         is   
  86.             select name,specialty from students for update;  
  87.     begin  
  88.             open students_cur;  
  89.              fetch students_cur into v_sname,  v_specialty ;  
  90.               
  91.             while students_cur%FOUND loop  
  92.                 if v_specialty ='计算机' THEN  
  93.                     delete from students  where current of students_cur;  
  94.                 end if;  
  95.                   
  96.                 fetch students_cur into v_sname ,v_specialty;  
  97.                   
  98.             end loop;  
  99.             close students_cur;  
  100.     end;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值