无法在Redshift存储过程中动态截断表

时间:2019-09-30 21:23:47

标签: amazon-redshift

我在Redshift中有一个表(我们称其为状态表),在其中设置了要截断的表的状态。为此,我创建了一个Redshift Stored Procedure。这是我的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;

现在,当我调用存储过程时,出现此错误: SQL Error [500310] [34000]: [Amazon](500310) Invalid operation: cursor does not exist;

enter image description here

我查看了SP的文档,以检查是否可以进行截断。通过查看examples,看起来是可能的。

我不确定这是怎么回事。我正在使用 RedshiftJDBC42-no-awssdk-1.2.34.1058.jar 并通过DBeaver连接。

1 个答案:

答案 0 :(得分:0)

好像我找到了答案。根据{{​​3}},Any cursor that is open (explicitly or implicitly) is closed automatically when a COMMIT, ROLLBACK, or TRUNCATE statement is processed。在循环的下一个迭代中,它试图访问已关闭的游标。