2015-11-20 5 views
0

У меня есть таблица. Я написал функцию в plpgsql, который вставляет строку в этой таблице:Получить значение по умолчанию после INSERT внутри PL/pgSQL

INSERT INTO simpleTalbe (name,money) values('momo',1000) ; 

Эта таблица serial поле под названием id. Я хочу в функции после того, как я вставляю строку, чтобы узнать идентификатор, полученный новой строкой.

Я думал использовать:

select nextval('serial'); 

перед вставкой, есть лучшее решение?

+0

http://www.postgresql.org/docs/current/static/sql-insert.html Посмотрите внизу на 'insert return' – Falmarri

ответ

0

Используйте пункт RETURNING. Вам нужно сохранить результат где-то внутри PL/PgSQL - с добавленным INTO ..

INSERT INTO simpleTalbe (name,money) values('momo',1000) 
RETURNING id 
INTO _my_id_variable; 

_my_id_variable должен быть объявлен с типом соответствия данных.

Похожие:

В зависимости от того, что вы собираетесь делать с ним, часто лучшее решение с чистым SQL. Примеры:

1

select nextval('serial'); не будет делать то, что вы хотите; nextval() фактически увеличивает последовательность, а затем INSERT снова увеличит ее . (Кроме того, «серийный» является не имени последовательности вашей serial колонки использует.)

@ ответ Эрвины (INSERT ... RETURNING) является лучшим ответом, поскольку синтаксис был введен специально для этой ситуации, но вы могли бы также сделать

SELECT currval('simpletalbe_id_seq') INTO ... 

в любое время после того, как ваш INSERT получить текущее значение последовательности. (Обратите внимание, формат имени последовательности имя_таблицы _ ColumnName _seq для автоматического определенной последовательности каркасного на serial колонку.)