首先,我知道游标的性能不佳,但在我的特定情况下我需要一个。
在 AWS Redshift 中,我有以下代码:
BEGIN;
DECLARE newCursor CURSOR FOR SELECT * FROM DBFoo.TableBar;
FETCH NEXT FROM newCursor;
CLOSE newCursor;
我收到以下错误:
<块引用>亚马逊无效操作:DECLARE CURSOR 只能在交易区块中使用;
自从“开始;”直接在“DECLARE newCursor CURSOR”之前我不明白它为什么失败,或者如何让它工作
编辑:我通过 Datagrip 连接到 Redshift。这是一个全新的会议。如果我在BEGIN之前声明游标也失败,因为它需要一个事务块
答案 0 :(得分:1)
您的会话可能处于“自动提交”模式。这基本上意味着每个 ';'是一个隐含的 COMMIT。您可以通过查看会话的 svl_statementtext 并查看您的语句的 xid 是否在发出 BEGIN 后继续更改来确认这一点。如果这是原因,您需要参考 Datagrip 文档来确定如何关闭自动提交。
答案 1 :(得分:0)
DataGrip documentation about transaction mode 和 execution behavior。
此外,您可以从每个控制台/会话的控制台工具栏中更改它
并为每个数据源设置