Amazon redshift 无法在红移存储过程中动态截断表

Amazon redshift 无法在红移存储过程中动态截断表,amazon-redshift,Amazon Redshift,我有一个红移的表(我们称之为状态表),在这里我设置了要截断的表的状态。为了实现这一点,我创建了一个红移。以下是我的SP代码: CREATE OR REPLACE PROCEDURE <schema>.truncate_table() AS $$ DECLARE v_tpsl RECORD; exec_statement VARCHAR(256); BEGIN FOR v_tpsl in SELECT * from <schama>.tablenam

我有一个红移的表(我们称之为状态表),在这里我设置了要截断的表的状态。为了实现这一点,我创建了一个红移。以下是我的SP代码:

CREATE OR REPLACE PROCEDURE <schema>.truncate_table()
AS $$
DECLARE
    v_tpsl RECORD;
    exec_statement VARCHAR(256);
BEGIN
    FOR v_tpsl in SELECT * from <schama>.tablename_process_status_log WHERE status = 'TRUE' LOOP
    exec_statement = 'TRUNCATE TABLE <schema>.' + quote_ident(v_tpsl.staging_table_name) + '_test;';
    RAISE INFO 'statement = %', exec_statement;
    EXECUTE exec_statement;
  END LOOP;
END;
$$
LANGUAGE plpgsql;
创建或替换过程。截断表()
作为$$
声明
v_tpsl记录;
exec_语句VARCHAR(256);
开始
对于v_tpsl,请选择*from.tablename_process_status_log,其中status='TRUE'循环
exec_语句='TRUNCATE TABLE.'+quote_ident(v_tpsl.staging_TABLE_name)+''u test;';
RAISE INFO“语句=%”,exec_语句;
执行exec_语句;
端环;
结束;
$$
语言plpgsql;
现在,当调用存储过程时,出现以下错误:
SQL错误[500310][34000]:[Amazon](500310)操作无效:光标不存在

我查看了SP的文档,以检查截断是否可行。通过观察,这似乎是可能的


我不确定这里面出了什么问题。我正在使用RedshiftJDBC42-no-awssdk-1.2.34.1058.jar并通过DBeaver连接。

看起来我找到了答案。根据,
在处理COMMIT、ROLLBACK或TRUNCATE语句时,任何打开(显式或隐式)的游标都会自动关闭
。在循环的下一次迭代中,它试图访问已经关闭的游标。

尝试使用常规PostgreSQL而不是buggy fork。@LaurenzAlbe-这是一个很好的建议,但这不能像我们希望的那样完成。