11

I have a void plsql function:

CREATE OR REPLACE FUNCTION do_something(p_id BIGINT) 
RETURNS void
AS $$
BEGIN
   insert ....
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

I want to call this function from another plsql function, but inside a query like:

SELECT  do_something(m.id) 
FROM    MyTable m
WHERE   m.IsActive;

When I run the sproc i get:

ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT, use PERFORM instead.

Is it possible to call a void function as part of a select statement?

Alexander Farber
  • 21,519
  • 75
  • 241
  • 416
ozczecho
  • 8,649
  • 8
  • 36
  • 42

1 Answers1

19

HINT: If you want to discard the results of a SELECT, use PERFORM instead.

PERFORM  do_something(m.id) 
FROM    MyTable m
WHERE   m.IsActive;

PERFORM is the PL/PgSQL alternative for SELECT for when you want to throw the results away. It cannot be used outside PL/PgSQL. For more information, see the manual.

Craig Ringer
  • 307,061
  • 76
  • 688
  • 778
  • 7
    Maybe worth mentioning, `PERFORM` is only valid in pl/pgsql context. – pozs Apr 02 '14 at 08:16
  • Yeah, fair. I usually write much more in depth answers, but this is such a "Did you actually read the error message / search for the error" one... – Craig Ringer Apr 02 '14 at 08:18
  • :-) I Did read the error and I did try "PERFORM"...but I must have fluffed it up...because before it didnt work...and now it does...grrr ...and sorry for wasting everyones time. – ozczecho Apr 02 '14 at 08:47