PostgreSQL 中的 Sybase
BEGIN ATOMIC
相当于什么?
应该是这样的:
create or replace function my_func()
returns int
as $$
begin
begin atomic
update stetment1;
update stetment2;
update stetment3;
end;
end;
$$ LANGUAGE PLPGSQL;
这三个更新语句必须同时成功或失败。
这三个更新语句必须同时成功或失败..
问题下面的评论是一个误解。 每个Postgres 函数都是事务性的,并且总是要么成功要么失败。您只需要一个
PROCEDURE
即可实现相反的效果:提交过程体内已经完成的操作。
文字子句
BEGIN ATOMIC
用于新的标准 SQL CREATE FUNCTION
语法,该语法最终已随 Postgres 14 添加。但它与任何其他 Postgres 函数一样“原子”。
无论哪种方式,使用新语法你都可以编写:
CREATE OR REPLACE FUNCTION my_func()
LANGUAGE plpgsql
RETURNS void -- since you are not returning anything
BEGIN ATOMIC
update stetment1;
update stetment2;
update stetment3:
END;
参见:
您可以使用BEGIN ATOMIC; ... 结尾; PostgreSQL 中的语句如下所示。 *
BEGIN ATOMIC; ... END;
语句仅适用于LANGUAGE SQL
,根据文档和我的答案给出了一些带有BEGIN ATOMIC; ... END;
语句的示例:
CREATE FUNCTION my_func() RETURNS INTEGER LANGUAGE SQL
BEGIN ATOMIC; -- Here
SELECT 2 + 3;
END; -- Here
实际上,不使用如下所示的
BEGIN ATOMIC; ... END;
语句与上面相同,因为在PostgreSQL中,BEGIN ATOMIC; ... END;
语句没有什么特别的,它只是一种语法,实际上在PostgreSQL中,一个函数会在事务中自动运行来回滚,如果有错误:
CREATE FUNCTION addition(value INTEGER) RETURNS INTEGER AS $$
SELECT 2 + 3;
$$ LANGUAGE SQL;