gpt4 book ai didi

postgresql - 我可以让 plpgsql 函数在不使用变量的情况下返回一个整数吗?

转载 作者:行者123 更新时间:2023-11-29 11:07:27 25 4
gpt4 key购买 nike

是这样的:

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

最佳答案

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

1) 返回(选择...)

CREATE OR REPLACE FUNCTION get_1(_param_id integer)
RETURNS integer
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN _param_id;
-- Or:
-- RETURN (SELECT col1 FROM tbl WHERE id = _param_id);
END
$func$;

2) 使用OUTINOUT 参数

CREATE OR REPLACE FUNCTION get_2(_param_id integer, OUT _col1 integer)
-- RETURNS integer -- is optional noise in this case
LANGUAGE plpgsql AS
$func$
BEGIN
SELECT INTO _col1 col1 FROM tbl WHERE id = _param_id;

-- also valid, but discouraged:
-- _col1 := col1 FROM tbl WHERE id = _param_id;
END
$func$;

More in the manual here.

3) (Ab)使用IN参数

Postgres 9.0 开始,您还可以使用输入参数 作为变量。 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_3(_param_id integer)
RETURNS integer
LANGUAGE plpgsql AS
$func$
BEGIN
SELECT INTO _param_id col1 FROM tbl WHERE id = _param_id;
RETURN _param_id;

-- Also vlaid, but discouraged:
-- $1 := col1 FROM tbl WHERE id = $1;
-- RETURN $1;
END
$func$;

变体 2) 和 3) 确实使用隐式变量,但您不必(根据要求)显式地DECLARE

4) 使用带有INOUT 参数的DEFAULT

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

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

INOUT _col1 integer = 123INOUT _col1 integer DEFAULT 123 的缩写。见:

5) 使用普通 SQL function相反

CREATE OR REPLACE FUNCTION get_5(_param_id integer)
RETURNS integer
LANGUAGE sql AS
'SELECT col1 FROM tbl WHERE id = _param_id';

或者使用参数引用 $1 而不是参数名称。

变体 5) 对函数体使用普通单引号。全部都一样。见:

db<> fiddle here - 演示所有(包括调用)

关于postgresql - 我可以让 plpgsql 函数在不使用变量的情况下返回一个整数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com