2015-05-25 70 views
0

我有一組3個表,每個表包含3列如下(user_id,user_name,user_lastname,user_code_type)。Postgresql函數返回所做更新

我使用以下函數來插入從表2的值到表1和3

CREATE OR REPLACE FUNCTION "TestDB"."TEST_UPDATE_1"() 
    RETURNS integer AS 
$BODY$ 
DECLARE 
update1 integer; 
update2 integer; 
BEGIN 
INSERT INTO "TestDB"."TEST.TABLE.1" (user_id, user_name, user_lastname, user_code_type) 
SELECT RT1.user_id, RT1.user_name, RT1.user_lastname, RT1.user_code_type FROM "TestDB"."TEST.TABLE.2" RT1 
WHERE 
NOT EXISTS (SELECT 1 FROM "TestDB"."TEST.TABLE.1" RT2 WHERE RT2.user_id = RT1.user_id); 
GET DIAGNOSTICS update1 = ROW_COUNT; 
INSERT INTO "TestDB"."TEST.TABLE.3" (user_id, user_name, user_lastname, user_code_type) 
SELECT RT1.user_id, RT1.user_name, RT1.user_lastname, RT1.user_code_type FROM "TestDB"."TEST.TABLE.2" RT1 
WHERE 
    NOT EXISTS (SELECT 1 FROM "TestDB"."TEST.TABLE.3" RT2 WHERE RT2.user_id = RT1.user_id); 
GET DIAGNOSTICS update2 = ROW_COUNT; 
RETURN update1+update2; 
END; 
    $BODY$ 
    LANGUAGE plpgsql VOLATILE 

由於此刻我得到的行,將其插在兩者的總數以上的結果表1和3.

我感興趣的輸出是一個表,它將表示行數,成功插入到1和3(帶輸出結果的單行和2列表)中。

我已經通過了這裏的帖子數量,但找不到將解決此問題的解決方案。任何幫助將非常感激。

回答

0

你應該改變功能的返回類型:

DROP FUNCTION "TestDB"."TEST_UPDATE_1"(); 

CREATE OR REPLACE FUNCTION "TestDB"."TEST_UPDATE_1"() 
    RETURNS TABLE (count1 int, count2 int) 
AS 
... 

和返回查詢:

... 
RETURN QUERY SELECT update1, update2; 
... 

執行功能:

SELECT * FROM "TestDB"."TEST_UPDATE_1"(); 

的更多信息,你可以找到here

+0

非常感謝您的及時回覆。我將實施更改併發布更新結果。 –