在 redshift 中创建存储过程
Posted
技术标签:
【中文标题】在 redshift 中创建存储过程【英文标题】:Creating stored procedure in redshift 【发布时间】:2020-12-09 09:02:37 【问题描述】:时,如下所示:
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 工作台不支持 $$。
任何解决此问题的方法。谢谢。
【问题讨论】:
【参考方案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
。以上是关于在 redshift 中创建存储过程的主要内容,如果未能解决你的问题,请参考以下文章