需要将 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”。 “sequence”具有“index”类型,因此无法完成:
UPDATE "table" SET "sequence" = "sequence" + 1 WHERE "CableLine" = 2
当将具有id = 10
的行中的“sequence”增加1
时,我会收到一个错误,指出另一行已经存在具有"sequence" = 2
的值。
id
是主键吗? - Erwin Brandstetter