【问题标题】:plpgsql function return another function valueplpgsql 函数返回另一个函数值
【发布时间】:2016-09-06 11:09:53
【问题描述】:

我有一个函数func1(),它返回整数。

我想编写另一个函数func2(mode integer),它可以返回func1() 结果或做更多的事情。 func1() 的返回值是 INTEGER 类型。

类似这样的:

CREATE OR REPLACE FUNCTION func2(mode integer)
  RETURNS integer AS
$$
begin
     if mode=1 then
       return func1();  -- NOT plpgsql syntax
     end if;

     more stuff .....

     return 2;
end
$$
LANGUAGE plpgsql VOLATILE

我的问题是return func1(); 怎么办?

我知道我能做到:

select func1() into temp;
return temp;

但我想知道是否有更优雅的方法来做到这一点。

【问题讨论】:

标签: postgresql plpgsql


【解决方案1】:

所有这些工作:

选项 1:

CREATE OR REPLACE FUNCTION func2(mode integer)
    RETURNS integer AS
$BODY$
DECLARE 
    _result integer;
BEGIN
    _result = 2;
     IF mode=1 THEN
       _result = func1();
     END IF;

     --more stuff .....

     RETURN _result;
END
$BODY$
    LANGUAGE plpgsql VOLATILE COST 100;

选项 2:

CREATE OR REPLACE FUNCTION func2(mode integer)
    RETURNS integer AS
$BODY$
BEGIN
     IF mode=1 THEN
       RETURN func1();
     END IF;

     --more stuff .....

     RETURN 2;
END
$BODY$
    LANGUAGE plpgsql VOLATILE COST 100;

【讨论】:

  • 使用:=作为赋值运算符优于简单的=
  • @a_horse_with_no_name 为什么首选它?
  • 我从不喜欢帕斯卡符号。只是个人喜好:)
  • 直到 9.3 这实际上是唯一记录在案的赋值运算符:postgresql.org/docs/9.3/static/plpgsql-statements.html 一个简单的等号仍然被接受。
  • @ban - "=" 是逻辑运算符,":=" 是赋值语句。一些使用“=”进行分配的语言使用不同的符号表示等价。 PLpgSQL 对原始 ADA 有一些限制,因此这种差异不会起太大作用,但最好与原始语言保持一致 - 使用“=”进行赋值的可能性是错误,但修复它为时已晚。
猜你喜欢
  • 2010-09-15
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多