我正在 Redshift 中创建过程。我想在 END 语句之前添加一条 select 语句来验证结果,但它不起作用。
这工作正常:
CREATE OR REPLACE PROCEDURE my_procedure()
LANGUAGE plpgsql
AS $$
BEGIN (a whole bunch of select into statements)
commit;
END;
$$;
但是当我在提交后使用“select count(*) cnt from table”时,我收到一个错误,例如
“无法从在原子上下文中执行的过程调用 COMMIT”
我知道我可以创建 my_procedure(current refcursor),它无需提交即可工作,但我无法让它与提交一起工作:
open current for select count(*) cnt from table_name;
看起来 SQL Server 在执行插入时返回了 select 语句。在 Redshift 中该怎么做?
最佳答案
您可能正在从打开的事务中调用存储过程。请参阅 "Managing transactions" documentation 中的 TRUNCATE
示例。 。
您可以在我们的 Redshift Utils repo on GitHub 中看到一些使用 COMMIT
的 Redshift 存储过程示例。 。特别是sp_sync_get_new_rows
有条件地使用 COMMIT
和 ROLLBACK
。
关于amazon-web-services - 提交后如何在 Redshift 过程中获取结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61255997/