amazon-web-services - 提交后如何在 Redshift 过程中获取结果集?

标签 amazon-web-services stored-procedures amazon-redshift

我正在 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有条件地使用 COMMITROLLBACK

关于amazon-web-services - 提交后如何在 Redshift 过程中获取结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61255997/

相关文章:

amazon-web-services - 为什么我的 ELB cloudwatch 指标 HealthyHostCount 设置为 900?

amazon-web-services - AWS EMR Spark : Error writing to S3 - IllegalArgumentException - Cannot create a path from an empty string

amazon-web-services - 亚马逊Rds m4 VS m3,哪个更好

javascript - DropDownList 未从存储过程中填充

sql - TSQL Where 子句满足多个条件

sql - 需要按天分割日期时间范围

python - 如何通过 Python Boto3 将数据加载到 Amazon Redshift?

Java Client连接ElasticCache Redis缓存节点

sql - 为什么我的 if 语句在我的存储过程中不起作用

sql - 如何按组输出两列中的每个值组合? - SQL