oracle中cursor和异常

1.游标Cursor
在写java程序中有集合的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。
语法:
  CURSOR 游标名 [ (参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;
例如:cursor c1 is select ename from emp;

游标的使用步骤:

  • 打开游标:      open c1;    (打开游标执行查询)
  • 取一行游标的值:fetch c1 into pjob; (取一行到变量中)
  • 关闭游标:       close  c1;(关闭游标释放资源)
  • 游标的结束方式   exit when c1%notfound
  • 注意: 上面的pjob必须与emp表中的job列类型一致:
           定义:pjob emp.empjob%type;
 
演示:带参数的游标使用,和循环
一段PL/SQL程序,为部门号为10的员工涨工资。
 
 1 declare
 2   cursor pc(dno myemp.deptno%type) is
 3   select empno from myemp where deptno = dno;
 4   pno myemp.empno%type;
 5  
 6 begin
 7   open pc(20);
 8   loop
 9   fetch pc
10   into pno;
11   exit when pc%notfound;
12   update myemp t set t.sal = t.sal + 1000 where t.empno = pno;
13   end loop;
14   close pc;
15  
16 end;
 
2.异常
 
异常是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。
系统定义异常
no_data_found (没有找到数据)
too_many_rows (select …into语句匹配多个行)
zero_divide ( 被零除
value_error (算术或转换错误)
timeout_on_resource (在等待资源时发生超时)
 
用户也可以自定义异常,在声明中来定义异常
DECLARE
My_job   char(10);
v_sal   emp.sal%type;
No_data    exception;
cursor c1 is select distinct job from emp    order by job;
如果遇到异常我们要抛出raise no_data;
 
 1 if语句和抛出异常
 2 if pemp%notfound then
 3     raise no_emp_found;
 4 end if;
 5  
 6 elsif语句写法
 7 if ...
 8 elsif...
 9 else...
10 end if;
 
原文地址:https://www.cnblogs.com/anzhi/p/7515945.html