2011-05-02 29 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

相關問題