我可以让 plpgsql 函数在不使用变量的情况下返回一个整数吗? [英] Can I make a plpgsql function return an integer without using a variable?

查看:23
本文介绍了我可以让 plpgsql 函数在不使用变量的情况下返回一个整数吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

像这样:

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 只是为了这个.

I would like to avoid a DECLARE just for this.

推荐答案

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

Yes you can. There are a number of ways.

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 参数

2) Use an OUT or INOUT parameter

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;

更多信息请参见此处的手册.

Postgres 9.0 起,您还可以将输入参数用作变量.9.0 的发行说明:

Since Postgres 9.0 you can also use input parameters as variables. The release notes for 9.0:

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

An input parameter now acts like a local variable initialized to the passed-in value.

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(根据要求).

With the last ones you do use a variable implicitly, but you don't have to DECLARE it explicitly (as requested).

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

This is a bit of a special case. The function body can be empty.

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 的缩写.更多:

INOUT _col1 integer = 123 is short notation for INOUT _col1 integer DEFAULT 123. More:

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;

这篇关于我可以让 plpgsql 函数在不使用变量的情况下返回一个整数吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆