On 2010-02-17, silly sad <s...@bankir.ru> wrote:
>
> acc=>
>
> CREATE OR REPLACE FUNCTION add_user (TEXT, TEXT, TEXT, TEXT)
> RETURNS usr AS $$
>    INSERT INTO usr (login,pass,name,email) VALUES ($1,$2,$3,$4)
>    RETURNING usr.*;
> $$ LANGUAGE sql SECURITY DEFINER;
>
> acc=>
>
> ERROR:  return type mismatch in function declared to return usr
> DETAIL:  Function's final statement must be a SELECT.
> CONTEXT:  SQL function "add_user"
>
> SURPRISE :-) SURPRISE :-)

SQL functions are inlined when invoked, and so must be valid subselects.

rewrite it in plpgsql.

 CREATE OR REPLACE FUNCTION add_user (TEXT, TEXT, TEXT, TEXT)
 RETURNS usr AS $$
 DECLARE
   retval usr;
 BEGIN
    INSERT INTO usr (login,pass,name,email) VALUES ($1,$2,$3,$4)
    RETURNING usr.* INTO retval;
    RETURN retval;
 END;
 $$ LANGUAGE PLPGSQL SECURITY DEFINER;


-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply via email to