【问题标题】:Can I make a plpgsql function return an integer without using a variable?我可以让 plpgsql 函数在不使用变量的情况下返回整数吗?
【发布时间】:2011-12-31 11:09:15
【问题描述】:

类似这样的:

CREATE OR REPLACE FUNCTION get(param_id integer)
  RETURNS integer AS
$BODY$
BEGIN
SELECT col1 FROM TABLE WHERE id = param_id;
END;
$BODY$
  LANGUAGE plpgsql;

为此,我想避免使用DECLARE

【问题讨论】:

    标签: postgresql function variables parameters plpgsql


    【解决方案1】:

    是的,你可以。有很多方法。

    1) RETURN (SELECT ...)

    CREATE OR REPLACE FUNCTION get(_param_id integer)
      RETURNS integer AS
    $func$
    BEGIN
       RETURN (SELECT col1 FROM TABLE WHERE id = _param_id);
    END
    $func$  LANGUAGE plpgsql;
    

    2) 使用OUTINOUT 参数

    CREATE OR REPLACE FUNCTION get(_param_id integer, OUT _col1 integer)
    -- RETURNS integer -- "RETURNS integer" is optional noise in this case
      AS  
    $func$
    BEGIN
       SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;
    
       -- also valid, but discouraged:
       -- _col1 := col1 FROM TABLE WHERE id = _param_id;
    END
    $func$  LANGUAGE plpgsql;
    

    More in the manual here.

    3) (Ab)使用IN参数

    Postgres 9.0 开始,您还可以使用 输入参数 作为变量。 The release notes for 9.0:

    一个输入参数现在就像一个初始化为传入值的局部变量。

    CREATE OR REPLACE FUNCTION get(_param_id integer)
      RETURNS integer AS
    $func$
    BEGIN
       SELECT INTO _param1  col1 FROM TABLE WHERE id = _param1;
       RETURN _param1;
    
       -- Also possible, but discouraged:
       -- $1 := col1 FROM TABLE WHERE id = $1;
       -- RETURN $1;
    END
    $func$  LANGUAGE plpgsql;
    

    对于最后一个,您确实使用一个变量,但您不必显式地DECLARE它(根据要求)。

    4) 使用带有INOUT 参数的DEFAULT

    这有点特殊。函数体可以为空。

    CREATE OR REPLACE FUNCTION get(_param_id integer, INOUT _col1 integer = 123)
      RETURNS integer AS
    $func$
    BEGIN
       -- You can assign some (other) value to _col1:
       -- SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;
       -- If you don't, the DEFAULT 123 will be returned.
    END
    $func$  LANGUAGE plpgsql;
    

    INOUT _col1 integer = 123INOUT _col1 integer DEFAULT 123 的缩写。更多:

    5) 改用普通的SQL function

    CREATE OR REPLACE FUNCTION get(_param_id integer)
      RETURNS integer AS
    $func$
       SELECT col1 FROM TABLE WHERE id = _param_id;
       -- use positional reference $1 instead of param name in Postgres 9.1 or older
    $func$  LANGUAGE sql;
    

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2016-11-12
      • 2013-11-06
      • 1970-01-01
      • 2017-11-11
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多