Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проверка UPDATE / 7 сообщений из 7, страница 1 из 1
25.05.2008, 02:04
    #35333373
SayAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
Хи Алл!
Народ выручайте :) Есть задача: Перед UPDATE table SET val=NEW WHERE val2=value
Нужно проверить существует ли хоть одно совпадение val2=value, и если нет добавить запись в table cо значением val2=valueи остальными полями по default. Я так понимаю нужно создать нейкий тригер который будет это отрабатывать?? Но вот как не знаю. POSTGRES 8.2.6
...
Рейтинг: 0 / 0
25.05.2008, 16:21
    #35333748
Author the new one
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
SayAdmХи Алл!
Народ выручайте :) Есть задача: Перед UPDATE table SET val=NEW WHERE val2=value
Нужно проверить существует ли хоть одно совпадение val2=value, и если нет добавить запись в table cо значением val2=valueи остальными полями по default. Я так понимаю нужно создать нейкий тригер который будет это отрабатывать?? Но вот как не знаю. POSTGRES 8.2.6

А как-то более традционно сделать камасутра мешает? То есть сначала попытаться найти val2=value, нашлось - вот и ладушки, не нашлось - добавили, а потом уже и апдейтим?
...
Рейтинг: 0 / 0
26.05.2008, 12:44
    #35334867
бухарь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
http://www.postgresql.org/docs/8.2/interactive/sql-update.html


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION replace_foo_value(p_key IN int, p_value IN int)
RETURNS void
AS $$
BEGIN
UPDATE foo
   SET value = p_value
   WHERE key = p_key;

IF NOT FOUND THEN
   INSERT INTO foo(key, value)
     VALUES (p_key, p_value);
END IF;
END;
$$ LANGUAGE PLPGSQL;
...
Рейтинг: 0 / 0
26.05.2008, 13:04
    #35334937
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
эта тема много раз поднималась: поиск
...
Рейтинг: 0 / 0
26.05.2008, 13:06
    #35334945
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
бухарьhttp://www.postgresql.org/docs/8.2/interactive/sql-update.html


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION replace_foo_value(p_key IN int, p_value IN int)
RETURNS void
AS $$
BEGIN
UPDATE foo
   SET value = p_value
   WHERE key = p_key;

IF NOT FOUND THEN
   INSERT INTO foo(key, value)
     VALUES (p_key, p_value);
END IF;
END;
$$ LANGUAGE PLPGSQL;
И что произойдёт, если два пользователя (естественно в двух разных сессиях) одновременно выполнят это процедуру (одновременно! Т.е. на момент выполнения ни одна сессия ещё не закоммичена).
Кстати, вопрос автору топика - это нормально, если будет несколько записей с val2=value?
...
Рейтинг: 0 / 0
26.05.2008, 13:25
    #35335001
бухарь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
pamirИ что произойдёт, если два пользователя (естественно в двух разных сессиях) одновременно выполнят это процедуру (одновременно! Т.е. на момент выполнения ни одна сессия ещё не закоммичена).

http://www.postgresql.org/docs/current/static/mvcc.html
...
Рейтинг: 0 / 0
29.05.2008, 12:00
    #35342544
SayAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка UPDATE
Спасибо всем ответившим, что хотел удалось сделать.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проверка UPDATE / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]