2015-08-11 2 views
-1

У меня есть таблица tab с колоннами:Update и вставить случаи в PostGreSQL функции

userid, usercode, value 

Я пишу plpgsql функцию, обновление/вставить таблицу. В случае, если идентификатор пользователя & USERCODE существует Мне нужно обновить значение В случае, если они не мне нужно вставить новое значение

, например, если таблица данных:

userid, usercode, value 
    5  10  20 
    3  8   10 

для вызова функции:

addvalue(5, 10 , 40) 
addvalue(1, 12 , 40.5) 

новые данные будут:

userid, usercode, value 
    5  10  60 
    3  8   10 
    1  12  40.5 

Это моя функция тела:

CREATE OR REPLACE FUNCTION addvalue(xuserid integer, xusercode Integer,xvalue Numeric) 
RETURNS integer AS 

$BODY$ 
begin 

    insert into tab(userid,usercode,value) values(xuserid ,xusercode,xvalue); 
    return 1 
end;     
$BODY$ 
LANGUAGE plpgsql VOLATILE 

Что такое лучший способ узнать, если мне нужно сделать INSERT или UPDATE statments?

Должен ли я делать UPDATE и проверять, вернёт ли он 0 (обновлено 0 строк) и в этом случае сделать INSERT? Или я должен запросить таблицу tab, чтобы узнать, userid = xuserid and usercode = xusercode?

+1

Вы можете быть здесь: http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-in-postgresql. Или обновите до postgres 9.5 и используйте 'upsert'. –

+0

Я нахожусь на postgresql версии 9.0 и не могу обновить дальше ... пока нет. – quack

+0

@quack - Из костяка Гордона вы *** могли *** искать в Интернете для любого из многих способов сделать «UPSERT» в PostgreSQL 9.0 ... http: //www.the-art-of-web .com/SQL/upsert / – MatBailie

ответ

1
begin 
IF xuserid not in (select distinct userid from tab) THEN 
insert into tab(userid,usercode,value) values(xuserid ,xusercode,xvalue); 
ELSE 
update tab 
set value = value + xvalue 
where userid = xuserid and usercode = xusercode 
END IF; 
-- return 1 
end; 

Это то, что вы пытаетесь сделать?

Смежные вопросы