Selon Daniel Caune <daniel.caune@xxxxxxxxxxx>:
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" I can easily convert this code into a PL/pgSQL function, but I'm thinking that pure SQL is more natural (and faster?) for such a stored function. Regards, -- Daniel ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org
Just add a SELECT query like this : CREATE FUNCTION create_matchmaking_session() RETURNS bigint AS $$ INSERT INTO matchmaking_session VALUES (nextval('seq_matchmaking_session_id')); SELECT currval('seq_matchmaking_session_id') as session_id; $$ LANGUAGE SQL; -- Hocine Abir IUT de Villetaneuse ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend