如何解决Postgresql:事务 - 异常程序问题
我正在尝试使用过程控制事务,但遇到了无法解决的错误。
这是代码:
drop table if exists cuentas;
create table cuentas (
id serial,nombre varchar(100) not null,saldo dec(15,2) not null,primary key(id),constraint saldo CHECK(saldo > 5000)
);
insert into cuentas(nombre,saldo)
values('Carlos',10000);
insert into cuentas(nombre,saldo)
values('Cesar',10000);
SELECT * FROM cuentas;
drop procedure if exists transferir;
create or replace procedure transferir(id_emisor int,id_receptor int,cantidad dec)
language plpgsql
as $$
begin
-- adding the amount from the recievers's account
update cuentas
set saldo = saldo + cantidad
where id = id_receptor;
-- substracting the amount to the sender's account
update cuentas
set saldo = saldo - cantidad
where id = id_emisor;
commit;
EXCEPTION
WHEN check_violation THEN
RAISE NOTICE 'Violación de saldo.';
rollback;
commit;
end;$$
当我尝试执行时:
call transferir(1,2,1000);
我明白了:
ERROR: no se puede comprometer mientras hay una subtransacción activa
CONTEXT: función PL/pgSQL transferir(integer,integer,numeric) en la línea 13 en COMMIT
Estado SQL: 2D000
有人能看出我做错了什么吗?
解决方法
嗨 'a_horse_with_no_name' 和论坛管理员,
很抱歉使用这个部分,我知道这不是正确的地方,但我无法回答 a_horse_with_no_name 也无法评论他的建议。
我正在使用 Postgresql 12.4 版。
我也取消选择自动提交。
但是 Postgresql 抛出错误。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。