如何在postgresql中从函数中获取变量的输出

时间:2018-03-30 19:30:54

标签: postgresql plpgsql

我是PostgreSQL的新手。我有查询:

---------
DO
$$
DECLARE
    l_pin INT;
    l_pin1 int;
BEGIN
    l_pin := 3;
    l_pin1 := 4;

select l_pin,l_pin1;
END;
$$
LANGUAGE PLPGSQL;
--------------------------
从上面的查询

我得到一个错误

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function inline_code_block line 9 at SQL statement
SQL state: 42601

我需要将l_pinl_pin1的值作为输出。

2 个答案:

答案 0 :(得分:1)

你所拥有的是DO statement,而不是"查询"也不是"功能"。 DO语句根本无法返回任何内容。

显示的错误是因为您无法在未分配结果的情况下在plpgsql代码块中调用SELECT。要从plpgsql函数实际返回值,请使用某种形式的RETURN(显式或隐式)。 最简单的例子:

CREATE OR REPLACE FUNCTION foo(OUT l_pin int, OUT l_pin1 int)
  RETURNS record AS  -- RETURNS record is optional because of OUT parameters
$func$
BEGIN
   l_pin := 3;
   l_pin1 := 4;

   RETURN;  -- RETURN is optional here because of OUT parameters
END
$func$  LANGUAGE plpgsql;

SELECT * FROM foo();

相关:

答案 1 :(得分:0)

首先,您可以创建一个可以包含多个值的新类型:

CREATE TYPE type_name AS (l_pin INTEGER, l_pin1 INTEGER);

然后你可以做类似的事情:

CREATE OR REPLACE FUNCTION function_name()
RETURNS type_name AS $$
  DECLARE
    result type_name;
  BEGIN
    /* Code that puts those values into type_name object 
    i.e. 
    result.l_pin := 3;
    result.l_pin1 := 4;
    */ 
    return result ;
  END
$$ language plpgsql