我们应该在 Redshift 的存储过程中使用 udf
Posted
技术标签:
【中文标题】我们应该在 Redshift 的存储过程中使用 udf【英文标题】:Shall we use udf in stored procedure in Redshift 【发布时间】:2021-02-13 23:02:46 【问题描述】:我需要在存储过程中使用 udf。由于 Redshift 需要临时表或游标才能在存储过程中使用 select 语句,所以我选择使用临时表。在存储过程中,调用 udf 的代码如下所示:
EXECUTE '如果存在则删除表' || tmp_name; EXECUTE '创建临时表' || tmp_name || ' as select f_MSG_log(' || i_trn_id,i_trm_msg_type_cd,i_trm_key_cd,i_trm_obj_cd,i_trm_msg_txt,i_log_level_opt,i_trm_file_nm_opt || ');';
当我调用存储过程时,它会抛出一个错误说: 亚马逊无效操作:查询“SELECT 'create temp table ' || $1 || ' as select f_MSG_log(' || $2 , $3 , $4 , $5 , $6 , $7 , $8 || ');'”返回 7 列; 1 条语句失败。
【问题讨论】:
【参考方案1】:我找到了答案:
EXECUTE '如果存在则删除表' || tmp_name; EXECUTE '创建临时表' || tmp_name || ' as select toolbox.f_MSG_log(' || i_trn_id || ',' || quote_literal(i_trm_msg_type_cd) || ',' || quote_literal(var_trm_key_cd) || ',' ||报价文字(var_trm_obj_cd)|| ',' ||报价文字(var_trm_msg_txt)|| ',' || i_log_level_opt || ',' ||报价文字(var_trm_file_nm_opt)|| ');';
【讨论】:
以上是关于我们应该在 Redshift 的存储过程中使用 udf的主要内容,如果未能解决你的问题,请参考以下文章
没有函数或存储过程的 Amazon RedShift 中的 Upsert
如何使用自动化或命令行工具管理 AWS Redshift 中的存储过程?
如何在 Redshift 中的 select 语句中使用存储过程