我在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;
我查看了SP的文档,以检查是否可以进行截断。通过查看examples,看起来是可能的。
我不确定这是怎么回事。我正在使用 RedshiftJDBC42-no-awssdk-1.2.34.1058.jar 并通过DBeaver连接。
答案 0 :(得分:0)
好像我找到了答案。根据{{3}},Any cursor that is open (explicitly or implicitly) is closed automatically when a COMMIT, ROLLBACK, or TRUNCATE statement is processed
。在循环的下一个迭代中,它试图访问已关闭的游标。