异常处理
异常:提高程序的健壮性
DECLARE
BEGIN
--触发异常
EXCEPTION
--处理异常
END;
如果不处理异常,会将异常传递到应用环境
create or replace procedure get_name as
v_name emp.ename%TYPE;
begin
select ename into v_name from emp;
dbms_output.put_line('name: ' || v_name);
end;
(一)处理系统异常情况
create or replace procedure get_name as
v_name emp.ename%TYPE;
begin
select ename into v_name from emp;
dbms_output.put_line('name: ' || v_name);
exception
when TOO_MANY_ROWS then --还有很其它预定义的异常:NO_DATA_FOUND
dbms_output.put_line('返回了太多的数据行');
when others then
null;
end;
(二)处理非预定义异常(有代码,但没有标识)
create table t(id int check(id >10),name varchar(30));
create or replace procedure insert_data_to_t as
begin
insert into t values(2,'chen'); -- -2290
end;
create or replace procedure insert_data_to_t as
check_id_exception exception;
PRAGMA EXCEPTION_INIT(check_id_exception,-2290);
begin
insert into t values(2,'chen');
exception
when check_id_exception then
dbms_output.put_line('id 号必须大于10');
when others then
null;
end;
(三)自定义异常(预定义异常和非预定义异常都与oracle有关,并且发生错误时隐含的触发,而自定义则与oracle没有关系,它必须要显式的触发)
create or replace procedure update_data_t as
begin
update t set name='chen' where id = 1000;--其实没有这个人,但是没有任何的提示
end;
create or replace procedure update_data_t as
no_student_exception exception;
begin
update t set name='chen' where id = 1000;
if SQL%NOTFOUND then
raise no_student_exception;
end if;
exception
when no_student_exception then
dbms_output.put_line('没有数据被更新');
when others then
null;
end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具