Amazon Redshift存储过程调用及RAISE语句语法问题咨询
问题1:是否支持call proc_test1(p_1 => 'x')格式调用
- Amazon Redshift完全支持使用**命名参数(=>语法)**调用存储过程,你给出的调用写法是合法的。
- 唯一需要注意的前提是:你的存储过程
proc_test1所在的schema在当前用户的search_path配置中,如果不在,需要在调用时补全schema前缀,比如call public.proc_test1(p_1 => 'x')。
问题2:RAISE;报错的原因
- 这个报错是因为Redshift的PL/pgSQL语法和原生PostgreSQL存在差异:原生PostgreSQL支持在EXCEPTION块中直接写无参数的
RAISE;来重抛当前捕获的异常,但Redshift的PL/pgSQL实现不支持无参数的RAISE语句,要求RAISE后必须指定异常级别、输出信息等参数。 - 如果你要实现重抛异常的逻辑,可以改成如下写法:
EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION 'Error: %', SQLERRM;
SQLERRM是内置变量,存储了当前捕获到的异常的错误信息,这样就可以把原始异常抛出,符合你原来的逻辑需求。
内容的提问来源于stack exchange,提问作者Gautam
相关产品推荐
相关产品推荐

