标签:
在PL/SQL 程序中 对于处理多行记录的事务经常使用游标来实现
有点像JAVA的迭代器
1游标的使用
定义游标
打开游标
提取游标数据
关闭游标
注意:定义的游标不能有Into语句
2 使用游标
--打印出80部门的所有的员工的工资
declare
v_sal employees.salary%type;
--定义游标
cursor emp_sal_cursor is select salary from employees where department_id=80;
begin
--打开游标
open emp_sal_cursor;
--提取游标
fetch emp_sal_cursor into v_sal;
while emp_sal_cursor%found loop --相当于迭代器的hasnext
dbms_output.put_line(‘salary:‘||v_sal);
fetch emp_sal_cursor into v_sal;
end loop;
--关闭游标
close emp_sal_cursor;
end;
3游标的for循环
Pl/sqL语言提供了游标for循环语句,自动执行游标的open fetch close语句和循环语句的功能;当进入循环时,游标for循环语句自动打开游标,并提取第一行数据 提取结束 也会自动关闭
将上面的程序修改成for循环实现
--打印出80部门的所有的员工的工资
declare
type emp_record is record
(
v_sal employees.salary%type,
v_empid employees.employee_id%type,
v_hiredate employees.hire_date%type
);
--声明一个记录类型的变量
v_emp_record emp_record;
--定义游标
cursor emp_sal_cursor is select salary,employee_id,hire_date from employees where department_id=80;
begin
for c in emp_sal_cursor loop
dbms_output.put_line(‘empid:‘||c.salary||‘ salary‘||c.employee_id||‘hiredate:‘|| c.hire_date);
end loop;
/* --打开游标
open emp_sal_cursor;
--提取游标
fetch emp_sal_cursor into v_sal;
while emp_sal_cursor%found loop --相当于迭代器的hasnext
dbms_output.put_line(‘salary:‘||v_sal);
fetch emp_sal_cursor into v_sal;
end loop;
--关闭游标
close emp_sal_cursor;
*/
end;
这时候不需要记录类型了 用select 上的变量就足够了
4 通过游标也可以更新数据
5带参数的游标
在定义游标的后面加一个括号cursor emp_sal_cursor(dept_id 值,sal 值)
6隐式游标
在sql查询之后添加
If sql%notfound (意思是sql语句查询之后无记录)
标签:
原文地址:http://www.cnblogs.com/HJL085/p/5724340.html