avkm
Дата: 03.04.2015 11:06:34
Добрый день.
С Postgres работаю совсем недавно т.к. возникла необходимость. Ранее работал только с SQL.
Задача классическая - необходимо узнать есть ли запись с первичным ключом в таблице, если есть - сделать update иначе - сделать insert.
1. Если делаю так(пример с сайта):
select * from table where rec_id = record_id;
if NOT FOUND then
--записей нет
insert... ;
else
--записи есть
update... ;
end if;
Ругается на переменную NOT FOUND.
2. Если делаю так
SET @Q = 0;
SELECT COUNT(*) INTO @Q
FROM tasks WHERE PK = 'блабла';
IF @QUANT = 0 then
INSERT INTO
ELSE
UPDATE
END IF;
Ругается на саму переменную Q. Возможно, дело в том, что в Postgres нельзя объявлять переменные внутри запроса.
Писал вместо SET - DECLARE, убирал символ @.
Прошу помощи как решить эту задачу.
Gold_
Дата: 03.04.2015 11:23:42
avkm,
Что это у вас функция? анонимный блок? Приведите код целиком.
avkm
Дата: 03.04.2015 11:29:24
Gold_,
нет, не функция. Я пишу это в тексте запроса.
Вопрос в том, можно ли это исполнить в тексте запроса как в SQL ?
Или надо писать функцию ?
Gold_
Дата: 03.04.2015 11:37:17
avkm,
тогда в анонимном
блоке
Gold_
Дата: 03.04.2015 11:39:56
avkm,
Стоит понимать, что между проверкой (select) и какими-то действиями (insert, update) конкурирующие транзакции могли изменить вашу table
mad_nazgul
Дата: 03.04.2015 11:42:23
avkm,
Это вам не MS SQL со встроенным TSQL'ем.
Тут чистая, как слеза, декларативное программирование.
И никаких процедурных штучек.
А так читаем документацию по PostgreSQL (раздел INSERT) до полного просветления.
<:o)
avkm
Дата: 03.04.2015 11:44:02
Gold_,
понял, спасибо!