Мне нужно вставить 2 записи в разных таблицах, - PullRequest
0 голосов
/ 10 августа 2011

Мне нужно вставить 2 записи в 2 разные таблицы. Проблема в том, что две записи будут с одинаковым Id. Например:

У меня есть таблица Mannto с полями IdMan и oters. У меня также есть сервисная таблица с ее IdServ.

Что я могу сделать, чтобы сделать это равным? Я использую Postgre. Идентификатор таблицы Mannto является последовательным, и мне нужно использовать его в качестве внешнего ключа в таблице Service

Я попробовал следующее, но это не работает:

Insert into Mannto ( idMan, field 1 field2 ...etc) 
            values ( default, 'f1', 'f2'...etc)

Insert into Service ( idServ, fkMannto, field1...etc) 
             values (default, (in this part I need the same ManntoId called idMan), 'f1')

Спасибо за любую помощь, которую вы можете оказать!

Ответы [ 3 ]

2 голосов
/ 10 августа 2011
INSERT INTO Mannto ( field1, field2 ...etc) VALUES ( 'f1', 'f2'...etc)
  RETURNING idMan;

http://www.postgresql.org/docs/current/static/sql-insert.html

1 голос
/ 10 августа 2011

Когда поле idMan использует последовательность для создания нового значения, вы можете обратиться к этому значению в следующей INSERT, используя CURRVAL () :

BEGIN; -- start transaction
      INSERT INTO Mannto ( idMan, field 1 field2 ...etc) 
        VALUES ( default, 'f1', 'f2'...etc);   
      INSERT INTO Service ( idServ, fkMannto, field1...etc) 
        VALUES (default, currval('name_of_the_sequence') , 'f1');
COMMIT; -- commit both inserts
0 голосов
/ 10 августа 2011

Возможно, это не лучшее решение, но вы могли бы использовать триггер.

CREATE TRIGGER MannToTrigger
AFTER INSERT OR UPDATE OR DELETE ON MannTo
    FOR EACH ROW EXECUTE PROCEDURE insertService();

Получите последний введенный код вашего MannTo и бросайте процедуру после каждой вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...