我是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_pin
和l_pin1
的值作为输出。
答案 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