Thread

  1. Re: [HACKERS] PL/pgSQL - for discussion (RETURN)

    Andreas Zeugswetter <andreas.zeugswetter@telecom.at> — 1998-03-13T10:12:21Z

    >        Returning from the function
    >
    >                RETURN <expr>;
    >
    >            The function terminates and the value of <expr>  will  be
    >            returned  to  the  upper executor.  The return value of a
    >            function cannot be undefined.  If control reaches the end
    >            of  the  toplevel block of the function without hitting a
    >            RETURN statement, a runtime error will occur.
    
    1. I think we should allow functions/procedures, that don't have a return value.
    	(think about a proc that only does an update, why return anything except an error)
    2. I think the RETURN will need a WITH RESUME, so a procedure can return more than one row.
    
    create dba procedure "dns".getusers()
    returning varchar(16), smallint;
    define gotuser varchar(16);
    define gotadmin smallint;
    execute procedure checkadmin();
    foreach select uname, admin into gotuser, gotadmin from passwd
            return gotuser, gotadmin with resume;
    end foreach;
    end procedure;
    
    Andreas
    
    
    
    
  2. Re: [HACKERS] PL/pgSQL - for discussion (RETURN)

    Jan Wieck <jwieck@debis.com> — 1998-03-13T12:36:39Z

    Andreas wrote:
    >
    > >        Returning from the function
    > >
    > >                RETURN <expr>;
    > >
    > >            The function terminates and the value of <expr>  will  be
    > >            returned  to  the  upper executor.  The return value of a
    > >            function cannot be undefined.  If control reaches the end
    > >            of  the  toplevel block of the function without hitting a
    > >            RETURN statement, a runtime error will occur.
    >
    > 1. I think we should allow functions/procedures, that don't have a return value.
    >    (think about a proc that only does an update, why return anything except an error)
    > 2. I think the RETURN will need a WITH RESUME, so a procedure can return more than one row.
    >
    > create dba procedure "dns".getusers()
    > returning varchar(16), smallint;
    > define gotuser varchar(16);
    > define gotadmin smallint;
    > execute procedure checkadmin();
    > foreach select uname, admin into gotuser, gotadmin from passwd
    >         return gotuser, gotadmin with resume;
    > end foreach;
    > end procedure;
    
        Yup.  Looks  nice.  But the executor neither supports sets of
        tuples nor single tuple to be returned from functions (except
        for  'sql'  language functions). I hacked around on that with
        the PL/Tcl and even if I return a heap tuple or a tuple table
        slot to the upper executor, it doesn't work :-(
    
    
    Jan
    
    --
    
    #======================================================================#
    # It's easier to get forgiveness for being wrong than for being right. #
    # Let's break this rule - forgive me.                                  #
    #======================================== jwieck@debis.com (Jan Wieck) #