【问题标题】:Passing variable inside stored procedure in Redshift returning error在Redshift返回错误的存储过程中传递变量
【发布时间】:2021-11-02 20:28:38
【问题描述】:

我有这个可以成功编译的存储过程,但是在调用该过程时,我得到一个错误:

亚马逊无效操作:“$1”或附近的语法错误

你能帮我理解什么是错的吗?提前谢谢你。

 CREATE OR REPLACE PROCEDURE SchemaName.Testing_Passing_Parameter_in_SP ()
 LANGUAGE plpgsql 
 AS   
 $$ 
  
  DECLARE 
  FirstDayofWeek VARCHAR(50); 
  Unload_Query VARCHAR(65000); 

  BEGIN 

WITH CTE_FirstDayOfWeek AS (SELECT TO_CHAR(DATE_TRUNC('WEEK', GETDATE()), 'MMDDYYYY') AS FirstDayOfWeek) 
SELECT FirstDayOfWeek INTO FirstDayofWeek FROM CTE_FirstDayOfWeek; 

  Unload_Query := ' UNLOAD (''' || 'SELECT  *
                                   FROM SchemaName.TableName '
                                ||             
                           ''') 
                   TO  '''||'s3://BucketName/FolderName/Sample_File_'||FirstDayofWeek||'.csv'||''' 
                   CREDENTIALS ''' ||'aws_access_key_id=xxx'||';'||'aws_secret_access_key=xxx'||  '''
                   Header
                   ALLOWOVERWRITE
                   delimiter '''||','||'''
                   addquotes
                   PARALLEL OFF          
                          ';
  EXECUTE Unload_Query;

 END; 
 $$;

CALL SchemaName.Testing_Passing_Parameter_in_SP ();

【问题讨论】:

    标签: variables stored-procedures amazon-redshift plpgsql dynamic-sql


    【解决方案1】:

    Redshift 基于非常古老的 Postgres,其中不检测 PL/pgSQL 变量和 SQL 标识符之间的冲突。变量FirstDayofWeek 与列FirstDayofWeek 同名。一般的解决方案是为 PL/pgSQL 变量使用前缀 _

    DECLARE 
      _FirstDayofWeek VARCHAR(50); 
      _Unload_Query VARCHAR(65000); 
    

    【讨论】:

    • 非常感谢帕维尔。有效!!我是 Postgres 的新手,所以这很有帮助。
    猜你喜欢
    • 2022-09-27
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2010-12-18
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多