是否可以使用两个insert语句创建存储过程,其中第一个insert语句中的id / primary_key将在第二个中使用。
例如。
INSERT INTO activity VALUES (DEFAULT, 'text', 'this is a test');
如果从上述语句返回的id为 x ,则第二个插入将如下:
INSERT INTO activity_tree VALUES (DEFAULT, **x**, user_id) or something like that.
我理解libpq具有可以从第一个语句中提供id的函数。
但我想将它们组合成一个存储过程。请指教。
此致 Mayank
答案 0 :(得分:5)
声明一个变量,例如new_id
然后您可以将生成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