cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Trigger Computed column refresh

Former Member
5,650

I have 2 tables (parent and child). On parent, I have a computed column that is sum of ColA in Child table by parent id.

My problem is: how to refresh computed column value when I have a insert/delete on child table? I don't need to process updates since my program doesn't allows it.

Accepted Solutions (1)

Accepted Solutions (1)

MCMartin
Participant

Use after insert, update and delete triggers like:

create TRIGGER "AInsert" after insert on child referencing new as new_row

create TRIGGER "AUpdate" after update of ColA, order 1 on child referencing new as new_row

create TRIGGER "ADelete" after delete order 1 on child referencing old as old_row

Former Member
0 Likes

what?! I don't understand! I know how to work with triggers, but I need a way to refresh computed column values when rows are inserted/deleted on another table!

MCMartin
Participant
0 Likes

I just wanted to give you a starter on how to work with a trigger to solve your problem. I didn't thought, that you were using the term computed column in its technical way, in that case Volkers answer is more appropriate.

VolkerBarth
Contributor
0 Likes

As stated in my answer, I would not recommend to do so if this column is really "computed".

How is the column declared - do you use an UDF to sum up the childs?

Former Member

In the help, in section SQL Anywhere Server - SQL Usage » Database objects » Computed columns » Recalculating computed columns, it states:

Computed columns are not recalculated under the following circumstances:

The computed column is queried.

The computed column depends on the values of other rows (using a subquery or user-defined function), and these rows are changed.

Answers (1)

Answers (1)

VolkerBarth
Contributor

Is this really a computed column, i.e. declared with COMPUTE(...)?

AFAIK, those should only be used with constant values and deterministic functions.

I would generally recommend to omit (or "delay") the computation completely by using a view instead of a computed column, say by something like

create view V_ParentWithSum as
select parent.*, sum(child.colA) as SummedChild
from parent key join child

If this does not need your requirements, I would use a trigger on child to update the parent. But then I would not declare the column as a computed column, as changing computed columns via triggers of other tables seems dangerous (and looks suspicious as well IMHO).