Subject | RE: [Firebird-general] Blobs in Triggers |
---|---|
Author | Claudio Valderrama C. |
Post date | 2005-08-03T03:50:39Z |
> -----Original Message-----It may be possible in the support list instead.
> From: Firebird-general@yahoogroups.com
> [mailto:Firebird-general@yahoogroups.com]On Behalf Of Nigel Weeks
>
> I'm having trouble detecting if a BLOB has changed in an update trigger.
>
> I've tried the following:
> If(NEW.blobfield != OLD.blobfield)THEN
> If(cast(NEW.blobfield AS VARCHAR(32000)) != cast(OLD.blobfield AS
> VARCHAR(32000))) THEN
>
> And a few others, to no avail.
>
> Is it even possible?
:-)
The problem is that I screwed the thing in FB1. I couldn't find any
reference to how blobs and cast or substring would work with blobs. This
only was clear when we were doing FB1.5 and Arno or Nickolay posted parts of
the recent SQL standard. The doco says that substring of blob should be
blob. Instead, I made it produce a string in FB1. I guess then that the
correct way to convert a blob to string would be using a cast like you tried
to do, but we don't support it.
There's enhanced (and fixed) functionality in FB2 that may allow you to do
the blob comparison directly, even if expensive with large blobs.
Ohtherwise, if you want to rely on current FB1.5 functionality, you could
try substring. Anyway, since you're limiting the conversion to 32K bytes, if
the blob is bigger, you get unreliable results. Try FB2 and see if direct
comparison of blob v/s blob or blob v/s string works as expected.
C.