【发布时间】:2021-10-25 11:59:21
【问题描述】:
我在执行 postgresql 存储过程时实际上很困惑(我从某处了解到以下内容):
create or replace procedure update_dba_trades ()
language plpgsql
as $$
begin
[CODE BLOCK WITH INSERT DELETE ETC...]
commit;
end;
$$
为什么我们使用所有的开始、结束和提交?我对postgresql的理解是“end”和“commit”是一样的
begin;
[code block]
end;
代表一个完整的事务(要么全部失败,要么全部成功)。我不需要begin; [code]; commit; end;
但是,我在尝试实现多个独立代码块时遇到了困难。在 PostgreSQL 中,我可以做到
begin;
[code block1]
end;
begin;
[code block2]
end;
即使[代码块2]失败,[代码块1]也可以成功,反之亦然。如果我这样做,
create or replace procedure update_dba_trades ()
language plpgsql
as $$
begin;
[code block1]
end;
begin;
[code block2]
end;
$$
然后有错误。如何实现多个独立的代码块?谢谢!
【问题讨论】:
-
begin和end只是 pl/pgsql 中的块。它们与交易无关。
标签: postgresql