【问题标题】:Creating stored procedure in redshift在 redshift 中创建存储过程
【发布时间】:2020-12-09 09:02:37
【问题描述】:

在 redshift 中创建存储过程时,如下所示:

CREATE OR REPLACE PROCEDURE sp_test() 
AS '
BEGIN
TRUNCATE TABLE TABLE_1;

INSERT INTO TABLE_1
SELECT COL1, COL2 
FROM TABLE_2
WHERE CONDITION='SAMPLE'; 
           
END;
'
LANGUAGE plpgsql;

这会产生错误syntax error near 'SAMPLE',因为single quotes is already used for stored procedure begin and end。另外,这里我们会not be able to replace single quotes in INSERT query to double,因为 redshift 会将其视为一列。

很少有其他帖子建议将$$ 用于存储过程,但是 sql 工作台不支持 $$。
任何解决此问题的方法。谢谢。

【问题讨论】:

    标签: sql stored-procedures amazon-redshift


    【解决方案1】:

    你试过双引号吗?

    WHERE CONDITION=''SAMPLE''; 
           
    

    数据样本

    CREATE TABLE t (id int, status text);
    INSERT INTO t VALUES (42,'foo');
    

    程序

    CREATE OR REPLACE PROCEDURE sp_test() 
    AS'
    BEGIN
    TRUNCATE TABLE t;
    INSERT INTO t
    SELECT 8,''new record'';            
    END;'
    LANGUAGE plpgsql;
    

    测试过程

    CALL sp_test();
    SELECT * FROM t
    
     id |   status   
    ----+------------
      8 | new record
    (1 Zeile)
    

    【讨论】:

    • @pc_pyr 奇怪。现在的错误信息是什么?
    • @pc_pyr 现在这是一个完全不同的问题,与您的原始问题无关。正如 AWS 文档所说,尝试将过程作为顶级调用调用,即不在显式事务块中调用:docs.aws.amazon.com/redshift/latest/dg/…
    • 谢谢@Jim Jones,请您多谈谈如何制作top-level call
    • @pc_pyr 正如我所说,这与您的原始问题无关,我们不鼓励在一篇文章中回答多个问题。因此,您必须为此提出另一个问题,或者查看我上面提到的链接中的SECURITY DEFINER
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多