Call Function from within Function - parent / dispatch

Поиск
Список
Период
Сортировка
От Stefan Zauchenberger
Тема Call Function from within Function - parent / dispatch
Дата
Msg-id 7B1A245D-F8DD-4AAB-8ACF-3C2C7F5A9563@ice-sys.com
обсуждение исходный текст
Ответы Re: Call Function from within Function - parent / dispatch
Список pgsql-admin

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

 

 

В списке pgsql-admin по дате отправления:

Предыдущее
От: pavan95
Дата:
Сообщение: Re: Active-Active Clustering in Postgres
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Call Function from within Function - parent / dispatch