2015-05-25 42 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

非常感谢您的及时回复。我将实施更改并发布更新结果。 –