我在为查询创建单元测试时遇到问题。在Java方法中,它看起来像这样:
public String method () {
StringBuilder query = new StringBuilder();
query.append(" BEGIN ");
query.append(" <stored procedure name> ;");
query.append(" END; " );
return query.toString(); }
在测试方法中,它必须执行回滚事务。对于经典的插入/删除/更新,它们将在批处理中添加启动事务/回滚。但我不确定它是否适用于存储过程,特别是如果它们包含在“begin”/“end”中。我需要知道PostgreSQL的相同答案。
答案 0 :(得分:0)
对于初学者来说,Postgres中没有存储过程。只有功能,几乎,但不完全相同。 DO
statement或准备好的声明也可能适合您。
特别是,函数总是原子的并在事务中运行。在调用它们的外部事务中,或者在它们自己的事务中。
并且是,函数可以像任何其他SQL命令一样回滚。一些无法回滚的命令也不能嵌套在外部事务中(如CREATE DATABASE
),因此也不能在函数内部使用。
BEGIN;
-- do something else
SELECT myfunc();
-- do something else
ROLLBACK; -- everything back to the start (well, almost everything)
相关: