postgresql – 我可以使一个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 VOLATILE
  COST 100;

我想为此避免一个DECLARE.

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

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)使用OUT或INOUT参数

CREATE OR REPLACE FUNCTION get(_param_id integer,OUT _col1 integer)
  RETURNS integer AS  -- "RETURNS integer" is optional in this case
$func$
BEGIN

SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;

-- also valid,but not as clean:
-- _col1 := col1 FROM TABLE WHERE id = _param_id;

END
$func$LANGUAGE plpgsql;

阅读更多in the manual here.

3)(Ab)使用IN参数

由于Postgresql 9.0还可以使用输入参数作为变量.我引用release notes for

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;

最后一个你确实使用一个变量,严格来说,但你不必另外声明.

4)使用带有INOUT参数的DEFAULT值

这是一个特殊情况.

CREATE OR REPLACE FUNCTION get(_param_id integer,INOUT _col1 integer = 123)
  RETURNS integer AS
$func$
BEGIN

-- You can set _col1 to some other value:
-- SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;
-- If you don't,123 will be returned.

END
$func$LANGUAGE plpgsql;

5)改用纯SQL function

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

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...