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;