Oracle学习笔记(5) 在PLSQL中使用游标获取数据
这是第五章的学习笔记,学习完第四章的数据库操作和事务之后,开始要学习游标的使用了……,希望大家能多给俺一些支持啊!
编程时使用的工具是PLSQL Developer 7.1.4
隐式游标
隐式游标的属性等在第四章笔记中已记录了一部分
如果要确保属性指向想要的SQL语句,那么就在SQL语句执行后,立即将属性值保存到一个本地变量中
用存储过程来实现这种效果:
先定义一个存储过程remove_from_emp ,用于从雇员中删除一个员工
在存储过程的参数中 in 表示输入,out 表示输出
if emp_cur4%found then update employee set salary = salary + 500 where current of emp_cur4; --returning salary into n_salary; end if; commit; n_salary := emp_row4.salary + 500; dbms_output.put_line('员工' || emp_row4.name || '原来的工资是' || emp_row4.salary || '元,增加工资后现在的工资是' || n_salary || '元'); close emp_cur4; -- 打开强类型游标变量 open emp_ref1 for select * from employee order by salary; -- 在游标变量中提取数据 fetch emp_ref1 bulk collect into emp_table; for i in 1..emp_table.count loop dbms_output.put_line(emp_table(i).name || ' 本月工资 ' || emp_table(i).salary); end loop; -- 关闭游标变量 close emp_ref1; -- 打开弱类型游标变量 open emp_ref2 for select name,job from employee; loop fetch emp_ref2 into emp_info; exit when emp_ref2%notfound; dbms_output.put_line(emp_info.name || '的工作是 ' || emp_info.job); end loop; close emp_ref2; -- 打开Oracle系统游标 open sys_cursor for select name,hiredate from employee order by hiredate desc; loop fetch sys_cursor into emp_info; exit when sys_cursor%notfound; dbms_output.put_line(emp_info.name || '加入公司的时间是 ' || emp_info.job); end loop; close sys_cursor;exception when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!'); when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!'); when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);end;/1 楼 guji528 2010-04-06 写存储过程经常都会用到游标,总结得很全面