Я использую SQL Anywhere 11.Когда непосредственные материализованные представления обновленных
У меня есть следующий вид:
CREATE MATERIALIZED VIEW "DBA"."PointsAcc"(/* view_column_name, ... */)
IN "SYSTEM" AS
select sum(PL.Points) AS Sum, DP.UserUID, COUNT(*) AS cnt
FROM Points DP
KEY JOIN PointLine PL
KEY JOIN PointHead PH
GROUP BY DP.UserUID
У меня есть триггер в PointLine, который должен выбрать сумму с этой точки зрения:
CREATE TRIGGER "WorkOnPoints" AFTER INSERT, DELETE
ORDER 1 ON "DBA"."Points"
REFERENCING OLD AS oldrow NEW AS newrow
FOR EACH ROW
BEGIN
declare @points integer;
set @points = (isnull((select isnull(Sum, 0)) FROM PointsAcc where UserUID = newrow.UserUID), 0))
END;
В переменной @points теперь содержится сумма до того, как строка была вставлена или удалена. Как я могу получить обновленную сумму из представления в триггере?
Решение является триггер уровня атаки. SQL Anywhere использует триггеры строк для обновления представления, и для этого запускаются триггеры пользователя. – klundby