Received: from localhost (unknown [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id 9CF152E4C20 for ; Fri, 11 Jan 2008 07:00:26 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.191]) (amavisd-maia, port 10024) with ESMTP id 94493-07 for ; Fri, 11 Jan 2008 07:00:05 -0400 (AST) Received: from mail.fmed.uba.ar (mail.fmed.uba.ar [157.92.152.1]) by postgresql.org (Postfix) with ESMTP id 84E1B2E3B49 for ; Fri, 11 Jan 2008 07:00:05 -0400 (AST) Received: from [157.92.155.58] (mailbis [157.92.155.58]) by mail.fmed.uba.ar (Postfix) with ESMTP id 286821232B5; Fri, 11 Jan 2008 09:00:14 -0200 (ARST) Message-ID: <47874CEB.3010803@fmed.uba.ar> Date: Fri, 11 Jan 2008 08:03:07 -0300 From: Gerardo Herzig User-Agent: Mozilla Thunderbird 1.0.7 (X11/20050923) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Daniel Caune CC: pgsql-sql@postgresql.org Subject: Re: SQL stored function inserting and returning data in a row. References: <1E293D3FF63A3740B10AD5AAD88535D206F416D1@UBIMAIL1.ubisoft.org> In-Reply-To: <1E293D3FF63A3740B10AD5AAD88535D206F416D1@UBIMAIL1.ubisoft.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200801/88 X-Sequence-Number: 29941 Daniel Caune wrote: >Hi, > >Is there any way to define a SQL stored function that inserts a row in a >table and returns the serial generated? > >CREATE TABLE matchmaking_session >( > session_id bigint NOT NULL DEFAULT >nextval('seq_matchmaking_session_id'), > ... >); > >CREATE FUNCTION create_matchmaking_sesssion(...) > RETURNS bigint >AS $$ > INSERT INTO matchmaking_session(...) > VALUES (...) > RETURNING session_id; >$$ LANGUAGE SQL; > >2008-01-10 22:08:48 EST ERROR: return type mismatch in function >declared to return bigint >2008-01-10 22:08:48 EST DETAIL: Function's final statement must be a >SELECT. >2008-01-10 22:08:48 EST CONTEXT: SQL function >"create_matchmaking_sesssion" > > > What about $$ INSERT INTO .... ; select currval('seq_matchmaking_session_id'); $$ language sql; ?