From: Stefan Zauchenberger <stefan@ice-sys.com>
To: pgsql-admin@postgresql.org
Subject: Call Function from within Function - parent / dispatch
Date: Thu, 23 Aug 2018 08:52:17 -0500
Message-ID: <7B1A245D-F8DD-4AAB-8ACF-3C2C7F5A9563@ice-sys.com> (raw)
I am having a problem creating a parent function that calls different functions within based on conditions. The functions within all take the exact same arguments and return the same set type. This must be a simple mistake on my part, but not sure of the fix.
When I try to use a RETURN statement, the following error is given:
ERROR: RETURN cannot have a parameter in function returning set
LINE 15: RETURN myfunctionB(paccntid,pitemid,pthing)...
^
HINT: Use RETURN NEXT or RETURN QUERY.
********** Error **********
ERROR: RETURN cannot have a parameter in function returning set
SQL state: 42804
Hint: Use RETURN NEXT or RETURN QUERY.
Character: 288
So, if I try using RETURN NEXT or the PERFORM statement, the client app says:
ERROR: query "SELECT myfunctionB(paccntid,pitemid,pthing)" returned more than one row
CONTEXT: PL/pgSQL function mydispatch(integer, integer, text) at RETURN NEXT
The individual functions within work fine when called on their own. I just need to fire of one or another based on simple logic.
Here is the basic function:
-- Function: mydispatch(integer, integer, text)
-- DROP FUNCTION mydispatch(integer, integer, text)
CREATE OR REPLACE FUNCTION mydispatch(
paccntid integer,
pitemid integer,
pthing text)
RETURNS SETOF myset AS
$BODY$
BEGIN
IF (condition = true)
RETURN myfunctionA(paccntid,pitemid,pthing);
END IF;
RETURN myfunctionB(paccntid,pitemid,pthing);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION myspatch(integer, integer, text)
OWNER TO admin;
Stefan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-admin@postgresql.org
Cc: stefan@ice-sys.com
Subject: Re: Call Function from within Function - parent / dispatch
In-Reply-To: <7B1A245D-F8DD-4AAB-8ACF-3C2C7F5A9563@ice-sys.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox