【问题标题】:Function nested call in PostgresqlPostgresql中的函数嵌套调用
【发布时间】:2018-11-02 08:31:23
【问题描述】:

当我执行 Test1() 时,它给了我输出,但是当我执行 Test2() 时,它给出了以下错误

查询结构与函数结果类型不匹配

返回的类型记录与第 1 列中的预期类型数字不匹配。

谁能告诉我我错过了什么。

CREATE OR REPLACE FUNCTION "Test1" (i_emp_id double precision, OUT o_emp_term_detail_id double precision, OUT o_term_id double precision, OUT o_term_start_date timestamp without time zone)
    RETURNS record
    LANGUAGE plpgsql
    SECURITY DEFINER
    AS $function$
     begin
    //logic
    END;
    $function$;

CREATE OR REPLACE FUNCTION "Test2"(i_emp_id double precision, OUT o_emp_term_detail_id double precision, OUT o_term_id double precision, OUT o_term_start_date timestamp without time zone)
RETURNS record
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
   begin
select Test1(i_emp_id);
END;
$function$;

【问题讨论】:

  • 当我们将值从一个函数返回到另一个函数时。有没有其他方法可以实现这一点,请帮助我。

标签: postgresql postgresql-9.5


【解决方案1】:
CREATE OR REPLACE FUNCTION "Test1" (i_emp_id double precision, OUT o_emp_term_detail_id double precision, OUT o_term_id double precision, OUT o_term_start_date timestamp without time zone)
RETURNS SETOF record
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
begin
 return query values(1.1::float,1.1::float,now()::timestamp);
END;
$function$;
CREATE OR REPLACE FUNCTION "Test2"(i_emp_id double precision, OUT o_emp_term_detail_id double precision, OUT o_term_id double precision, OUT o_term_start_date timestamp without time zone)
RETURNS SETOF record
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
begin
    RETURN QUERY select * FROM  "Test1"(i_emp_id) t;
END;
$function$;

您的查询存在多个语法问题。这是一个基于您的输入的工作示例。

【讨论】:

  • 感谢柯克·罗伊巴尔
  • 如果这满足您的问题,请接受答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 2019-12-22
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多