Thread: how to tell if column set on update

how to tell if column set on update

From
chester c young
Date:
within a trigger need to know if the UPDATE statement set a column.  the column might be set to the old value or a
differentvalue.
 

(want to make sure the app is sending all necessary values)

thanks



     


Re: how to tell if column set on update

From
nha
Date:
Hello,

Le 20/07/09 15:19, chester c young a écrit :
> within a trigger need to know if the UPDATE statement set a column.  the column might be set to the old value or a
differentvalue.
 
> 
> (want to make sure the app is sending all necessary values)
> 
> thanks
> 

If the column to test is known -- e.g. column MyCol --, NEW.MyCol and
OLD.MyCol -- respectively value of MyCol after UPDATE and value of MyCol
before UPDATE -- can be compared.

I may be wrong if you are looking for the column(s) that are really
updated, not if such a column is updated or not. In this case, each
column of the target table may be tested with their respective new and
old values as well.

Regards.
--
nha / Lyon / France.


Re: how to tell if column set on update

From
chester c young
Date:
> Le 20/07/09 15:19, chester c young a écrit :
> > within a trigger need to know if the UPDATE statement
> set a column.  the column might be set to the old value
> or a different value.
> >
> > (want to make sure the app is sending all necessary
> values)
> >
> > thanks
> >
>
> If the column to test is known -- e.g. column MyCol --,
> NEW.MyCol and
> OLD.MyCol -- respectively value of MyCol after UPDATE and
> value of MyCol
> before UPDATE -- can be compared.

for example,
create table t1( c1 int, c2 int );
insert into t1 values( 1, 2 );

1) update t1 set c1=4 where c1=1;
2) update t1 set c1=4, c2=2 where c1=1;

each update results in the same row, but in the second update c2 was actually set.

a trigger on the update - how do we know if c2 has been actually set or not?





Re: how to tell if column set on update

From
Frank Bax
Date:
chester c young wrote:
>> Le 20/07/09 15:19, chester c young a écrit :
>>> within a trigger need to know if the UPDATE statement
>> set a column.  the column might be set to the old value
>> or a different value.
>>> (want to make sure the app is sending all necessary
>> values)
>>> thanks
>>>
>> If the column to test is known -- e.g. column MyCol --,
>> NEW.MyCol and
>> OLD.MyCol -- respectively value of MyCol after UPDATE and
>> value of MyCol
>> before UPDATE -- can be compared.
> 
> for example,
> create table t1( c1 int, c2 int );
> insert into t1 values( 1, 2 );
> 
> 1) update t1 set c1=4 where c1=1;
> 2) update t1 set c1=4, c2=2 where c1=1;
> 
> each update results in the same row, but in the second update c2 was actually set.
> a trigger on the update - how do we know if c2 has been actually set or not?



You cannot do that.  You can only detect that a value has changed.


Re: how to tell if column set on update

From
nha
Date:
Hello,

Le 22/07/09 13:42, Frank Bax a écrit :
> chester c young wrote:
>>> Le 20/07/09 15:19, chester c young a écrit :
>>>> within a trigger need to know if the UPDATE statement
>>> set a column.  the column might be set to the old value
>>> or a different value. [...]
>>>>
>>> If the column to test is known -- e.g. column MyCol --,
>>> NEW.MyCol and OLD.MyCol [...] can be compared.
>>
>> for example,
>> create table t1( c1 int, c2 int );
>> insert into t1 values( 1, 2 );
>>
>> 1) update t1 set c1=4 where c1=1;
>> 2) update t1 set c1=4, c2=2 where c1=1;
>>
>> each update results in the same row, but in the second update c2 was
>> actually set.
>> a trigger on the update - how do we know if c2 has been actually set
>> or not?
> 
> You cannot do that.  You can only detect that a value has changed.
> 

There would be one way to detect a value change but it is more related
to application management than to data manipulation. For the column c2,
it could be assumed that a flag is set when (a row of) c2 is updated.
Such a flag may be stored in a separate table (while it could also be
added to table t1) that is updated with a trigger based on update on t1.

Regards.
--
nha / Lyon / France.