我正在Redshift中创建过程。我想在END语句之前添加一个select语句来验证结果,但它不起作用。
这很好:
CREATE OR REPLACE PROCEDURE my_procedure()
LANGUAGE plpgsql
AS $$
BEGIN (a whole bunch of select into statements)
commit;
END;
$$;
但是,当我在提交后使用"从表中选择计数(*(cnt"时,我会得到一个错误,比如
"COMMIT不能从在原子上下文中执行的过程中调用">
我知道我可以创建my_procedure(当前refcursor(,它在没有提交的情况下工作,但我无法使它与提交一起工作:
open current for select count(*) cnt from table_name;
SQL Server似乎在执行插入时返回了select语句。如何在Redshift?
可能是从打开的事务中调用存储过程。请参阅"管理事务"文档中的TRUNCATE
示例。
您可以在GitHub上的Redshift Utils repo中看到使用COMMIT
的一些Redshift存储过程示例。特别地,sp_sync_get_new_rows
有条件地使用COMMIT
和ROLLBACK
。