更新时间:2025-08-19 GMT+08:00
分享

异常处理

在存储过程中使用EXCEPTION处理机制可以提高代码的容错性,但频繁地捕获和处理异常可能会导致性能下降。每次异常处理都涉及上下文的创建和销毁,这会消耗额外的内存和资源。此外,由于异常被捕获,日志中不会记录错误信息,从而增加了问题定位的难度。

建议在必要时才使用EXCEPTION处理机制,并确保传递充足的上下文信息,以便于问题的定位和解决。

gaussdb=# create schema best_practices_for_procedure;
CREATE SCHEMA
gaussdb=# create table best_practices_for_procedure.tb1(id int, name varchar2(20));
CREATE TABLE
gaussdb=# create unique index id1 on best_practices_for_procedure.tb1(id);
CREATE INDEX
--创建带有exception的存储过程。
gaussdb=# create or replace procedure best_practices_for_procedure.proc1(oi_flag OUT int, os_msg OUT varchar) as
begin
oi_flag := 0;
os_msg := 'insert into tb1 some data.';
for i in 1..10 loop
if i = 5 then
insert into best_practices_for_procedure.tb1 values(i - 1, 'name'|| i - 1);--人为制造报错。
end if;
insert into best_practices_for_procedure.tb1 values(i, 'name'|| i);
end loop;
exception when others then
oi_flag := 1;
os_msg := SQLERRM; --将报错信息传递出去。
end;
/
CREATE PROCEDURE
gaussdb=# declare
oi_flag int;
os_msg varchar(1000);
begin
best_practices_for_procedure.proc1(oi_flag, os_msg);
if oi_flag = 1 then
dbe_output.print_line('Exception for ' || os_msg);
end if;
end;
/
Exception for Duplicate key value violates unique constraint "id1".
ANONYMOUS BLOCK EXECUTE
gaussdb=# drop schema best_practices_for_procedure cascade;
NOTICE:  drop cascades to 2 other objects
DETAIL:  drop cascades to table best_practices_for_procedure.tb1
drop cascades to function best_practices_for_procedure.proc1()
DROP SCHEMA

相关文档