【问题标题】:Convert PostgreSQL function to PostgreSQL Stored Procedure将 PostgreSQL 函数转换为 PostgreSQL 存储过程
【发布时间】:2020-07-11 14:51:44
【问题描述】:

我使用 AWS-SCT 将架构从 oracle 迁移到 postgreSQL,包被转换为 postgreSQL 中的函数。 我需要将此函数转换为过程以与应用程序中间件中的代码进行压缩。

我尝试转换为程序,每次我遇到SQL state: 42601inout parameter are permitted 之类的错误

请帮助将函数转换为过程。

CREATE OR REPLACE Function "pk_audfreq$sp_audfreq"(
    OUT out_a double precision,
    OUT out_b double precision,
    OUT out_c double precision)
    RETURNS record
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$
DECLARE
BEGIN    
    SELECT
        MIN(audresponsetime), AVG(audresponsetime), MAX(audresponsetime)
        INTO STRICT out_a, out_b, out_c
        FROM public.audio_freq;        
    END;
$BODY$;

【问题讨论】:

  • 如果你想返回一些东西,使用一个(设置返回)函数。过程并不意味着返回结果集。
  • 试过了,仍然给出语法错误 SQL 状态:42601,需要帮助才能将函数更正到 PostgreSQL 中的过程而没有语法错误
  • 当然你可以使用INOUT,但是你必须提供参数。为什么要坚持对自然是函数的东西使用过程?
  • 以及为什么坚持使用函数或过程来编写一个最好封装在 VIEW 中的简单语句

标签: oracle postgresql stored-procedures database-migration aws-sct


【解决方案1】:

您不能在过程中使用OUT 参数(目前)。正如the documentation 所说:

OUT 参数当前不支持过程。请改用INOUT

【讨论】:

  • 酷,我用 INOUT 创建了一个过程,给出了错误消息inout arguments are permitted
  • 除非您显示相关代码和完整的错误信息,否则很难提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2014-09-13
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多