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

May*_*ank 1 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

a_h*_*ame 5

声明一个变量,例如new_id然后你可以在那里存储generate 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);
Run Code Online (Sandbox Code Playgroud)

这假定调用生成值的列 id

顺便说一句:不要使用"不合格"的插入语句.始终在INSERT部件中指定列.这使您的代码更稳定:

INSERT INTO activity (id, some_column, other_column) 
VALUES 
(DEFAULT, 'text', 'this is a test')
Run Code Online (Sandbox Code Playgroud)

并确保您没有像列一样调用变量.user_id这似乎是一个潜在的命名冲突.这将使用8.x进行编译,但可能会给您带来奇怪的错误.我想这将不再用9.x编译