Postgresql存储过程:在另一个语句中使用id

时间:2011-05-02 17:02:13

标签: postgresql stored-procedures

是否可以使用两个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

1 个答案:

答案 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

编译
相关问题