On Wednesday 21 January 2004 20:12, D. Dante Lorenso wrote:
> NEVERMIND...  This is not a trigger problem.  It's a unique
> constraint problem...  If I have a unique constraint on
> a column like 'afile_version', and want to do an update on
> that column to add one to each number, is there a way to
> add an 'ORDER BY' to the update?
[snip]
>     FOR my_rec IN
>         SELECT afile_id
>         FROM audio_file
>         ORDER BY afile_version DESC
>     LOOP
>         /* roll back the version... */
>         UPDATE audio_file SET
>             afile_version = afile_version + 1
>         WHERE afile_id = my_rec.afile_id;
>     END LOOP;

This was mentioned in the last couple of weeks on one of the lists - don't 
know which. Someone suggested doing UPDATE ...version=-version followed by 
UPDATE ...version=(-version)+1

> And that does the trick, but I guess I might also be able
> to do something like this?:

Nope - or rather, if it does work I think it's down to chance.

>     UPDATE audio_file SET
>         afile_version = afile_version + 1
>     WHERE afile_id IN (
>         SELECT afile_id
>         FROM audio_file
>         ORDER BY afile_version DESC
>     );

PS - this is really a bug, but it doesn't seem to bite very often, and there 
are work-arounds, so it hasn't reached the top of any developer's list yet.

-- 
  Richard Huxton
  Archonet Ltd

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to