Нужно "привязать" UPDATE
к ORDER BY
. Я пытаюсь использовать курсоры, но получаю ошибку:
cursor "cursupd" doesn't specify a line, SQL state: 24000
код:
BEGIN;
DECLARE cursUpd CURSOR FOR SELECT * FROM "table" WHERE "field" = 5760 AND "sequence" >= 0 AND "sequence" < 9 ORDER BY "sequence" DESC;
UPDATE "table" SET "sequence" = "sequence" + 2 WHERE CURRENT OF cursUpd;
CLOSE cursUpd;
COMMIT;
Как это сделать правильно?
ОБНОВЛЕНИЕ 1
Без курсора, когда мне это нравится:
UPDATE "CableLinePoint" AS "t"
SET "sequence" = t."sequence" + 2
from (
select max("sequence") "sequence", "id"
from "CableLinePoint"
where
"CableLine" = 5760
group by "id"
ORDER BY "sequence" DESC
) "s"
where "t"."id" = "s"."id" and "t"."sequence" = "s"."sequence"
Я получаю уникальную ошибку. Поэтому нужно обновлять с конца, а не с самого начала.
ОБНОВЛЕНИЕ 2
Таблица:
id|CableLine|sequence
10| 2 | 1
11| 2 | 2
12| 2 | 3
13| 2 | 4
14| 2 | 5
Необходимо обновить (увеличить) поле "последовательность". "sequence" имеют тип "index", поэтому не может быть сделано:
UPDATE "table" SET "sequence" = "sequence" + 1 WHERE "CableLine" = 2
Когда "sequence" в строке с id = 10
увеличивается на 1
, я получаю сообщение об ошибке, что еще одна строка с "sequence" = 2
уже существует.