INSERT with RETURNING clause inside SQL function

Поиск
Список
Период
Сортировка
От Diego Schulz
Тема INSERT with RETURNING clause inside SQL function
Дата
Msg-id 47dcfe400811031422m1cc73820h902144ecd173cc42@mail.gmail.com
обсуждение исходный текст
Ответы Re: INSERT with RETURNING clause inside SQL function  ("Diego Schulz" <dschulz@gmail.com>)
Re: INSERT with RETURNING clause inside SQL function  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: INSERT with RETURNING clause inside SQL function  (Lennin Caro <lennin.caro@yahoo.com>)
Re: INSERT with RETURNING clause inside SQL function  (rintaant <antero.rintamaki@netikka.fi>)
Список pgsql-general
Hi all,

I'm re-writing some functions and migrating bussines logic from a
client application to PostgreSQL.

I expected something like this to work, but it doesn't:

-- simple table
CREATE TABLE sometable (
   id SERIAL PRIMARY KEY,
   text1 text,
   text2 text
);

CREATE OR REPLACE FUNCTION add_something(text, text) RETURNS INTEGER AS $$
   INSERT INTO sometable (id, foo, bar ) VALUES (DEFAULT, $1, $2 )
RETURNING id ;
$$ LANGUAGE SQL ;


Please note the use of RETURNING clause. If I put a SELECT 1; after
the INSERT, the function works (but doesn't returns any useful value
:)
I need the function to return the last insert id. And yes, I'm aware
that the same can be achieved by selecting the greatest id in the
SERIAL secuence, but is not as readable as RETURNING syntax. And no,
for me it's not important that RETURNING is not standard SQL.

Does anyone knows why RETURNING doesn't works inside SQL functions?

Any advise will be very appreciated. TIA.

diego

В списке pgsql-general по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: pg_casts view (was Re: date_trun() with timezones? (was Re: TIME column ...))
Следующее
От: "Diego Schulz"
Дата:
Сообщение: Re: INSERT with RETURNING clause inside SQL function