Amazon Redshift 存储过程调用

Posted

技术标签:

【中文标题】Amazon Redshift 存储过程调用【英文标题】:Amazon Redshift stored procedure call 【发布时间】:2021-08-19 20:46:32 【问题描述】:
CREATE OR REPLACE PROCEDURE proc_test1(p_1 varchar)
    LANGUAGE plpgsql

AS $$   
DECLARE
V_TEST integer := 0;
BEGIN
    
    select count(*) 
    from mytab
    into V_TEST
    WHERE X =P_1;

RAISE NOTICE 'COUNT IS:(%)',V_TEST;
EXCEPTION
 WHEN OTHERS THEN
 null;
END;  
$$
;

在 Amazon Redshift 中,我不能这样调用这个存储过程吗?

调用 proc_test1(p_1 => 'x')

另外,为什么带有分号的 RAISE 会失败?下面的错误处理程序说 RAISE; - 我得到的错误是无效操作:在或附近出现语法错误;

CREATE OR REPLACE PROCEDURE risk.proc_test1(p_1 varchar)
    LANGUAGE plpgsql

AS $$   
DECLARE
V_TEST integer := 0;
BEGIN
    
    select count(*) 
    from risk.mytab
    into V_TEST
    WHERE X =P_1;

RAISE NOTICE 'COUNT IS:(%)',V_TEST;
EXCEPTION
 WHEN OTHERS THEN
RAISE;
END;  
$$
;

【问题讨论】:

这与这个问题有关吗? ***.com/questions/67987599/… 你应该听取评论者的建议 - 对于每年 15K 条记录,这是使用错误的数据库。 【参考方案1】:
call proc_test1(p_1 => 'x')

您是在询问调用的语法,还是询问命名参数?

文档没有提及,所以不支持。

https://docs.aws.amazon.com/redshift/latest/dg/r_CALL_procedure.html

我想关于RAISE 错误,您缺少必需的参数

https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-messages-errors

RAISE level 'format' [, variable [, ...]];

所有这些都在文档中。

【讨论】:

谢谢,跟进问题,我需要在 redshift 表中存储时间戳列并默认设置当前时间戳,但是我在 aws 文档中没有看到 current_timestamp,而 select current_timestamp 在我的返回值贝弗 你真的需要学习做互联网研究。 docs.aws.amazon.com/redshift/latest/dg/… @Guatam 如果对您有帮助,请考虑将此问题和其他问题标记为正确。

以上是关于Amazon Redshift 存储过程调用的主要内容,如果未能解决你的问题,请参考以下文章

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

没有函数或存储过程的 Amazon RedShift 中的 Upsert

Amazon redshift 存储过程,CONTINUE 不能在循环外使用;

Amazon Redshift 是不是有自己的存储后端

HIVE 或 PIG 作为 Amazon Redshift 的替代品?

在 Amazon Redshift 中存储极小的值