Oracle中光标的使用和异常
1.没有参数的光标的使用
SQL> declare
2 cursor cl is select * from emp;
3 emp_row emp%rowtype;
4 begin
5 open cl;
6 loop
7 fetch cl into emp_row;
8 exit when cl%notfound;
9 dbms_output.put_line('员工的名称'|| emp_row.ename || '员工的部门'|| emp_row.deptno);
10 end loop;
11 close cl;
12 end;
13 /
员工的名称SMITH员工的部门20
员工的名称ALLEN员工的部门30
员工的名称WARD员工的部门30
员工的名称JONES员工的部门20
员工的名称MARTIN员工的部门30
员工的名称BLAKE员工的部门30
员工的名称CLARK员工的部门10
员工的名称SCOTT员工的部门20
员工的名称KING员工的部门10
员工的名称TURNER员工的部门30
员工的名称ADAMS员工的部门20
员工的名称JAMES员工的部门30
员工的名称FORD员工的部门20
员工的名称MILLER员工的部门10
PL/SQL procedure successfully completed
SQL> declare
2 cursor cl(emp_name varchar2) is select * from emp where ename=emp_name;
3 emp_row emp%rowtype;
4 begin
5 open cl('SMITH');
6 fetch cl into emp_row;
7 dbms_output.put_line('员工的名称'||emp_row.ename||'员工的工作'|| emp_row.job);
8 close cl;
9 end;
10 /
员工的名称SMITH员工的工作CLERK
部门编号为10的员工
SQL> declare
2 cursor cl(emp_deptno number) is select * from emp where deptno=emp_deptno;
3 emp_row emp%rowtype;
4 begin
5 open cl(10);
6 loop
7 fetch cl into emp_row;
8 exit when cl%notfound;
9 dbms_output.put_line( '员工的名称:'||emp_row.ename);
10 end loop;
11 close cl;
12 end;
13 /
员工的名称:CLARK
员工的名称:KING
员工的名称:MILLER
PL/SQL procedure successfully completed
除0的异常
SQL> declare
2 pnum number:=10;
3 begin
4 pnum:=pnum/0;
5 exception
6 when zero_divide then
7 dbms_output.put_line('除数不能为0');
8 end;
9 /
除数不能为0
PL/SQL procedure successfully completed
自定义的例外
SQL> declare
2 cursor cl(emp_no number) is select * from emp where empno=emp_no;
3 emprow emp%rowtype;
4 no_found exception;
5 begin
6 open cl(1000);
7 fetch cl into emprow;
8 if cl%notfound then raise no_found;
9 end if;
10 close cl;
11 exception
12 when no_found then
13 dbms_output.put_line('自己定义的意外');
14 end;
15 /
自己定义的意外
PL/SQL procedure successfully completed