On 10/25/26 8:34 AM, Mark wrote:

On Sun, Oct 25, 2026 at 3:17 PM Adrian Klaver <[email protected] <mailto:[email protected]>> wrote:

    On 10/25/26 7:55 AM, Mark wrote:
     > Hi Adrian
     >
     > Thanks for the input
     >
     > On Sun, Oct 25, 2026 at 2:42 PM Adrian Klaver
    <[email protected] <mailto:[email protected]>
     > <mailto:[email protected]
    <mailto:[email protected]>>> wrote:

     >
     >     And from here:
     >
     > https://www.postgresql.org/docs/current/plpgsql- <https://
    www.postgresql.org/docs/current/plpgsql->
     >     declarations.html#PLPGSQL-DECLARATION-PARAMETERS <https://
     > www.postgresql.org/docs/current/plpgsql-
    declarations.html#PLPGSQL- <http://www.postgresql.org/docs/current/
    plpgsql-declarations.html#PLPGSQL->
     >     DECLARATION-PARAMETERS>
     >
     >     "To call a function with OUT parameters, omit the output
     >     parameter(s) in
     >     the function call: ..."
     >
     >
     > In the second case with 3 parameters:  SELECT getSessDbKey
    (iSessionId
     > => '1234'::text, iUser => ....
     > This was called from the psql command line, the OUT values were
    returned
     > in the terminal, example:
     > getsessdbkey
     > ---------------
     > (3,,keyFound)

    Which is the correct process.

    When you are calling(SELECTing) the function inside the other function
    you are doing:

    SELECT getSessDbKey (jSessionId, jUser, 'functionName'::text,
    vSessDbKey, vSessRet, vGetSessDbKeyMess);

    There six arguments to to the function.

    You get this:

    ERROR:  function getsessdbkey(text, text, text, bigint, customType,
    text) does not exist

    because your functions signature is:

    getsessdbkey(text, text, text)

    The OUT parameters are not exposed, so you only get to use three
    arguments to the function.

    If you want a parameter to be dual purpose then you can declare it
    INOUT.

When calling the function (and when I get the error) this is from another function using the syntax: SELECT getSessDbKey (jSessionId, jUser, 'functionName'::text, vSessDbKey, vSessRet, vGetSessDbKeyMess);

The function signature according to \df getSessDbKey is:
Schema |     Name     | Result data type |                   Argument data types               | Type --------+--------------+------------------ +---------------------------------------------------------------------------------------------------------------------+------  public | getsessdbkey Argument data types| record           | isessionid text, iuser text, ifunction text, OUT osessdbkey bigint, OUT osessret retmessage, OUT retsessdbmess text | func

with 6 parameters, which is why the call has 6 parameters. If you are aware of a way to find the function signature, do please let me know?

The easiest way is to ignore everything in the column 'Argument data types' that is declared OUT, what is left is the signature.



For the command line call only 3 parameters were provided and the terminal listed the OUT 3 parameters I showed in my previous response

Which as I stated before is entirely correct.


I do not have / need / have built around INOUT parameters

Then when you SELECT the getsessdbkey in the other function do exactly as you did in the psql case, use only (isessionid text, iuser text, ifunction text).

OUT is a shortcut to doing a RETURN of the variable, it does not figure into the input of arguments to the function body.


     >
     >
     > Thanks for the link, for the 1st case I had defined the IN and OUT
     > parameters in the parent function, I have also just tried the:
     > parameterName ALIAS FOR $x , but that did not make a difference
     >
     > Mark
     >
     > Edit I have just seen your follow up message, there are no INOUT
    parameters
     >
     >      >
     >      > I just tried to user CALL and the HINT was to use SELECT
     >      >
     >      > Mark
     >      >
     >      > On Sun, Oct 25, 2026 at 1:00 PM Tom Lane
    <[email protected] <mailto:[email protected]>
     >     <mailto:[email protected] <mailto:[email protected]>>
     >      > <mailto:[email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>>> wrote:
     >      >
     >      >     Mark <[email protected]
    <mailto:[email protected]> <mailto:[email protected]
    <mailto:[email protected]>>
     >     <mailto:[email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>>> writes:
     >      >      > I am getting the following error which has been
    driving me
     >     crazy:
     >      >      > ERROR:  function getsessdbkey(text, text, text, bigint,
     >      >     customType, text)
     >      >      > does not exist
     >      >
     >      >     (1) search_path problem, perhaps?
     >      >     (2) are you using a CALL statement to call it?
     >      >
     >      >                              regards, tom lane
     >      >
     >
     >
     >     --
     >     Adrian Klaver
     > [email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>
     >


-- Adrian Klaver
    [email protected] <mailto:[email protected]>



--
Adrian Klaver
[email protected]


Reply via email to