1

我遵循https://dwgeek.com/redshift-stored-procedure-return-result-set-working-example.html/使用临时表创建存储过程的步骤,但面临上述错误。

CREATE OR REPLACE PROCEDURE sample_return_table(tmp_table INOUT varchar(256)) 
AS '
  DECLARE
    row record;
  BEGIN
   EXECUTE ' DROP table if exists ' || tmp_table;
   EXECUTE ' CREATE temp TABLE  ' || tmp_table ||  ' AS SELECT DISTINCT table_schema FROM information_schema.tables ';
  END;
'
LANGUAGE plpgsql;

错误:

[Amazon](500310) Invalid operation: syntax error at or near "DROP" 
Position: 132; [SQL State=42601, DB Errorcode=500310]
1 statement failed.

我可以知道是什么问题吗?

4

1 回答 1

2

以下是Amazon Redshift 中存储过程概览中的示例存储过程:

CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar)
AS $$
BEGIN
  RAISE INFO 'f1 = %, f2 = %', f1, f2;
END;
$$ LANGUAGE plpgsql;

请注意,使用$$来标识过程的内容,而您的代码使用'.

using 的问题'在于它也在过程内部使用(例如,就在之前DROP),因此混淆了 Redshift。

尝试更改为未使用的序列(例如$$)以避免此问题。

于 2020-09-15T02:38:47.917 回答