【发布时间】:2019-09-20 04:54:26
【问题描述】:
我来自 SQL Server 的悠久历史并尝试学习 PL/PGSQL。我最近发现了 PG11 功能 CREATE PROCEDURE,它允许在其体内进行内部事务。
作为学习练习,我创建了这个:
DROP PROCEDURE IF EXISTS test_proc();
CREATE PROCEDURE test_proc()
LANGUAGE plpgsql
AS $$
BEGIN
DROP TABLE IF EXISTS a;
CREATE TABLE a (aid int);
COMMIT;
END;
$$;
call test_proc();
它在 PSQL 中运行良好,但是当我在 PGAdmin 4 的查询工具中执行它时,它会出错
错误:无效的交易终止
上下文:PL/pgSQL 函数 test_proc() 在 COMMIT 的第 5 行
SQL 状态:2D000
有人可以解释发生了什么吗?我猜 PROCEDURE 实际上是有效的,问题可能出在查询工具中,可能错误地处理了包含的 COMMIT。
对于解决这个问题有什么建议吗?
谢谢!
【问题讨论】:
-
您执行的查询会导致错误
-
嗨。我正在执行上面发布的一组查询。
-
您是否先创建了存储过程,然后在创建时出现错误
-
没错。创建过程时失败。如果我删除提交(我认为在其中有效),它会起作用。
-
用函数替换关键字 PROCEDURE
标签: pgadmin-4