一、所有的PL/SQL异常都具有以下几个基本特征: 错误类型:表示了错误是ORA错误还是PLS错误 错误代号:一串表示错误代号的数字 错误文本:错误消息文本,包括错误代号 二、PL/SQL会产生两种类型的错误 : ORA错误 PLS错误 ORA错误通常是运行时的错误,应该由
一、所有的PL/SQL异常都具有以下几个基本特征:
错误类型:表示了错误是ORA错误还是PLS错误
错误代号:一串表示错误代号的数字
错误文本:错误消息文本,包括错误代号
二、PL/SQL会产生两种类型的错误:
ORA错误
PLS错误
ORA错误通常是运行时的错误,应该由程序来处理。
PLS错误通常是编译错误,应该在执行程序之前进行处理。
--:使用PL/SQL语句块输出99乘法表
--dbms_output.put_line()
declare
v_i number;
v_k number;
v_j number;
begin
for v_i in 1..9 loop
v_j:=1;
while v_j
v_k:=v_i*v_j;
dbms_output.put_line('v_j'||v_j||'*'||'v_i'||v_i||'='||'v_k'||v_k);
v_j:=v_j+1;
end loop;
dbms_output.put_line(chr(10));
end loop;
end;
--:使用Select ename into v_ename from emp where deptno=&no;
-- 出现多行值的异常(TOO_MANY_ROWS),使用异常处理打印错误代码和错误信息;注意最后使用others收尾
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where deptno=&no;
dbms_output.put_line('v_ename:'||v_ename);
-- if v_ename = 'chen'
-- then dbms_output.put_line('v_ename:'||v_ename);
--else
-- dbms_output.put_line('too_many_rows:'||sqlerrm);
--end if;
exception
when TOO_MANY_ROWS then
dbms_output.put_line('多值异常'||sqlerrm);
when others then
dbms_output.put_line('其他异常');
end;
--:通过输入的员工编号,使用%rowtype类型定义一个emp表的行类型,并输出员工编号、名字、工资、部门编号。
-- 注意处理没有查到数据的异常(no_data_found)
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=&员工编号;
dbms_output.put_line('v_empno:'||v_emp.empno ||'v_empname:'||v_emp.ename||'v_empsal'||v_emp.sal||'v_empdeptno:'||v_emp.deptno);
exception
when no_data_found then
dbms_output.put_line('异常:没找到数据'||sqlerrm);
when others then
dbms_output.put_line('其他异常');
end;