Хранимые процедуры Postgresql: использование идентификатора из одного оператора в другом - PullRequest
1 голос
/ 02 мая 2011

Можно ли создать хранимую процедуру с двумя операторами вставки, где идентификатор / primary_key из первого оператора вставки будет использоваться во втором.

Например,

INSERT INTO activity VALUES (DEFAULT, 'text', 'this is a test');

Если идентификатор, возвращаемый из вышеприведенного оператора, равен x , вторая вставка будет выглядеть так:

INSERT INTO activity_tree VALUES (DEFAULT, **x**, user_id) or something like that.

Я понимаю, что у libpq есть функции, которые могут дать идентификатор из первого оператора.

Но я хочу объединить их в хранимую процедуру. Пожалуйста, сообщите.

С уважением, Mayank

1 Ответ

5 голосов
/ 02 мая 2011

Объявите переменную, например, new_id и затем вы можете сохранить сгенерированный идентификатор там:

INSERT INTO activity VALUES (DEFAULT, 'text', 'this is a test')
   RETURNING id INTO new_id;

INSERT INTO activity_tree VALUES (DEFAULT, new_id, user_id);

Предполагается, что столбец, в котором генерируется значение, называется id

Кстати: не используйте «неквалифицированные» операторы вставки. Всегда указывайте столбцы в части INSERT. Это делает ваш код намного более стабильным:

INSERT INTO activity (id, some_column, other_column) 
VALUES 
(DEFAULT, 'text', 'this is a test')

И убедитесь, что вы не вызываете переменные так же, как столбцы. user_id кажется, здесь возможен конфликт имен. Это скомпилируется с 8.x, но может привести к странным ошибкам. Я думаю, что это больше не будет компилироваться с 9.x

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