2012-05-03 5 views
0

Я использую 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 теперь содержится сумма до того, как строка была вставлена ​​или удалена. Как я могу получить обновленную сумму из представления в триггере?

+0

Решение является триггер уровня атаки. SQL Anywhere использует триггеры строк для обновления представления, и для этого запускаются триггеры пользователя. – klundby

ответ

1

Это зависит от версии SQLA, которую вы используете в настоящее время.

Если вы не создавали View с опцией немедленного обновления вы должны вызвать

REFRESH MATERIALIZED VIEW view-list 

Для получения более подробной информации проверить эти ссылки

http://dcx.sybase.com/index.html#1201/en/dbreference/alter-materialized-view-statement.html

И

http://dcx.sybase.com/1201/en/dbreference/refresh-materialized-view-statement.html

Смежные вопросы