Postgresql Postgres中奇怪的异常处理
我试图理解PL/pgSQL中的异常处理,但是 案例1:Postgresql Postgres中奇怪的异常处理,postgresql,exception,plpgsql,Postgresql,Exception,Plpgsql,我试图理解PL/pgSQL中的异常处理,但是 案例1: CREATE OR REPLACE PROCEDURE ins () AS $$ DECLARE i INT; BEGIN insert into scott.emp (empno) values (9000); commit; i:=1/0; EXCEPTION WHEN OTHERS THEN --rollback; END $$ LANGUAGE plpgsql; call ins(); 我猜这行是插入的,但不是 案例2: CRE
CREATE OR REPLACE PROCEDURE ins ()
AS $$ DECLARE
i INT;
BEGIN
insert into scott.emp (empno) values (9000);
commit;
i:=1/0;
EXCEPTION WHEN OTHERS THEN
--rollback;
END $$ LANGUAGE plpgsql;
call ins();
我猜这行是插入的,但不是
案例2:
CREATE OR REPLACE PROCEDURE ins ()
AS $$ DECLARE
i INT;
BEGIN
insert into scott.emp (empno) values (9000);
commit;
--i:=1/0;
EXCEPTION WHEN OTHERS THEN
--rollback;
END $$ LANGUAGE plpgsql;
call ins();
现在,没有div by zero,但是表中没有行
案例3:
CREATE OR REPLACE PROCEDURE ins ()
AS $$ DECLARE
i INT;
BEGIN
insert into scott.emp (empno) values (9000);
commit;
--i:=1/0;
--EXCEPTION WHEN OTHERS THEN
--rollback;
END $$ LANGUAGE plpgsql;
call ins();
现在插入该行。似乎这个问题是我的异常块,但为什么呢
提前谢谢。
Marco悄悄地扔掉错误消息确实会使调试变得困难
CREATE OR REPLACE PROCEDURE ins ()
AS $$ DECLARE
i INT;
BEGIN
insert into scott.emp (empno) values (9000);
commit;
--i:=1/0;
EXCEPTION WHEN OTHERS THEN
raise notice E'%', SQLERRM;
END $$ LANGUAGE plpgsql;
显示:
NOTICE: cannot commit while a subtransaction is active
这是由于:
事务不能在具有异常处理程序的块内结束
悄悄地丢弃错误消息确实会使调试变得困难
CREATE OR REPLACE PROCEDURE ins ()
AS $$ DECLARE
i INT;
BEGIN
insert into scott.emp (empno) values (9000);
commit;
--i:=1/0;
EXCEPTION WHEN OTHERS THEN
raise notice E'%', SQLERRM;
END $$ LANGUAGE plpgsql;
显示:
NOTICE: cannot commit while a subtransaction is active
这是由于:
事务不能在具有异常处理程序的块内结束
在此处阅读完整解释:在此处阅读完整解释: