26

I'm trying to fetch to values from a plpgsql function with 2 OUT paramenters but I have some problem.

These are the functions:

CREATE OR REPLACE FUNCTION get_test(OUT x text, OUT y text)
AS $$
BEGIN
   x := 1;
   y := 2;
END;
$$  LANGUAGE plpgsql;
----------------------------------------------------------------

CREATE OR REPLACE FUNCTION get_test_read()
RETURNS VOID AS $$
DECLARE
   xx text;
   yy text;
BEGIN

   SELECT get_test() INTO xx, yy;
   
   RAISE INFO 'x: <%>', xx;
   RAISE INFO 'y: <%>', yy;

END;
$$  LANGUAGE plpgsql;

The output of the command:

select get_test_read();

INFO: x: <(1,2)

INFO: y: <>

get_test_read


So both the values go to the first parameter. I cannot find some example on how to call a function like this.

1
  • Just use "select * from get_test_read();" to get named columns. Commented Mar 22, 2023 at 17:14

2 Answers 2

43
+500

As you have 2 OUT params, your function will return a record.

In order to get all values you should use function as the source of your data and put it into the FROM clause like this:

SELECT * FROM get_test() INTO xx, yy;
Sign up to request clarification or add additional context in comments.

2 Comments

it gives me error as follows: ERROR: syntax error at or near "into"
@Muhammed - You can only use SELECT... INTO... inside a function (with such named variables defined). the answer does not clearly indicate that. If you are doing this outside a function just omit the INTO... part.
4
SELECT * INTO xx, yy FROM get_test();

UPDATE:

Explanation:

Modifying the second function:

CREATE OR REPLACE FUNCTION get_test_read()
RETURNS VOID AS $$
DECLARE
   xx text;
   yy text;
BEGIN

   SELECT * INTO xx, yy FROM get_test();
   
   RAISE INFO 'x: <%>', xx;
   RAISE INFO 'y: <%>', yy;

END;
$$  LANGUAGE plpgsql;  

This is similar to SELECT INTO with TABLE, where only get 2 values:

SELECT "FIELD1", "FIELD2" INTO variable1, variable2 FROM "TABLE" WHERE ...

Npgsql Basic Usage

PL/pgSQL Function Parameter Modes: IN, OUT, INOUT

2 Comments

Hey, thanks for the answer! Could you give a bit of explanation? It would help OP and future readers :)
OK xShirase, I have modified my answer with an explanation

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.