AMAZON 500310:无效操作:“Drop”处或附近的语法错误

Posted

技术标签:

【中文标题】AMAZON 500310:无效操作:“Drop”处或附近的语法错误【英文标题】:AMAZON 500310: Invalid operation: syntax error at or near " Drop" 【发布时间】:2020-09-15 02:15:01 【问题描述】:

我遵循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.

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

【问题讨论】:

【参考方案1】:

这是来自Overview of stored procedures in Amazon Redshift 的示例存储过程:

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

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

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

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

【讨论】:

$$ 不能在 sql 工作台中使用。这就是为什么我按照其他人的推荐使用''。错误:42601:[Amazon](500310) 在 "$$ 处或附近未终止的美元引号字符串 使用 SQL Workbench/J 版本 125 时,请考虑指定备用分隔符作为解决方法。由于 CREATE PROCEDURE 包含以分号 (;) 分隔的 SQL 语句,因此定义备用分隔符(例如正斜杠 (/))并将其放在 CREATE PROCEDURE 语句的末尾会将整个语句发送到 Amazon Redshift 服务器进行处理。如下例所示。我应该在 SQL workbench/j 中使用什么分隔符 问题与$$无关,而是SQL客户端认为是命令结束的分号(;)。您可以继续使用$$,但该文档页面建议将备用分隔符设置为/,或者可能将整个命令作为“批处理”发送。我不熟悉 SQL Workbench,但请参阅:SQL Workbench: Creating stored procedures and triggers @Denise:你是对的。 Redshift 没有启用“美元报价”支持(仅适用于 Postgres)——但我想为 Redshift 启用它也是有意义的。我会改变的 当然。对于这个问题,我决定使用 SQL WORKBENCHJ 版本 124,它允许我们使用 $$。

以上是关于AMAZON 500310:无效操作:“Drop”处或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

[0A000][500310] [Amazon](500310) 无效操作:无法在 pg 表上定义物化视图。

[Amazon](500310) 无效操作:尚不支持此类IN/NOT IN查询;

Redshift 存储过程 - [Amazon](500310) 无效操作:“$1”处或附近的语法错误;

SQL 错误 [500310] [42703]: [Amazon](500310) 无效操作:events_20180626_temp 中不存在列“engagement_time_msec”;

如何通过手动查询重现:[Amazon](500310) 无效操作:找不到从“未知”到整数的转换函数;

更新声明:[Amazon](500310) 无效操作:目标表必须是等值连接谓词的一部分;