2011-05-02 52 views
1

是否可以使用两个插入语句创建一个存储过程,其中第一个插入语句中的id/primary_key将在第二个中使用。Postgresql存储过程:在另一个语句中使用id

例如,

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.

我明白thatlibpq具有以下功能:它可以从给ID第一个声明。

但我想将它们组合成一个存储过程。请指教。

问候, Mayank

回答

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部分指定列。这使得你的代码更加稳定:

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

并确保你没有像列那样调用变量。 user_id似乎是一个潜在的命名冲突。这将与8.x编译,但可能会给你奇怪的错误。我认为这将不再编译与9.x

+0

**优秀**信息。非常感谢。我会照顾你所建议的每一件事。再次感谢 – Mayank 2011-05-02 18:01:37

+0

@Mankank:如果答案是你正在寻找的,那么接受它。这是如何工作 – 2011-05-02 18:09:15

+0

接受。我不知道这个规定。我比较新的Stackoverflow :) – Mayank 2011-05-02 18:56:56

相关问题