Условное обновление триггера Hana Studio (SQL Script) - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть два примера таблиц:

    TABLE1:
      ID    | COLUMN_B| COLUMN_C
   _________|_________|_________
       1    |    0    |    1
    ________|_________|_________
       2    |    0    |    1
    ________|_________|_________
       3    |    0    |    1


    TABLE2:
      ID    | COLUMN_E| COLUMN_F
    ________|_________|________
       1    |    Y    |    X
    ________|_________|_________
       2    |    Y    |    X
    ________|_________|_________
       3    |    Y    |    X

Я хотел бы написать триггер в Hana Studio, используя скрипт SQL Script для обновления столбца E из таблицы 2 при обновлении столбца B из таблицы 1к конкретному значению (скажем, 100).Строки из таблицы 1 ссылаются в таблице 2 на первый столбец (ID).

Я написал следующий код:

create trigger "UPDATE_TABLES"
    after update of "COLUMN_B" on "TABLE1"
    referencing new row as new, old row as old
    for each row 
begin
    update "TABLE2"
    set "COLUMN_E" = 'my new value'
    where :old."COLUMN_B" = '100' and "TABLE1"."ID" = :old."ID";
end;

Когда я устанавливаю TABLE1.COLUMN_B в строке 1 на 100,Я ожидаю, что код изменит TABLE2.COLUMN_E на «мое новое значение» в строке 1, но ничего не происходит.Кто-нибудь может указать, что именно я здесь делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я полагаю, что оператор UPDATE в коде триггера должен немного отличаться, как показано ниже

create trigger "UPDATE_TABLES"
    after update of "COLUMN_B" on "TABLE1"
    referencing new row as new, old row as old
    for each row 
begin
    update "TABLE2"
    set "COLUMN_E" = 'my new value'
    where :new."COLUMN_B" = '100' 
    and TABLE2.ID = :old."ID";
end;

В противном случае я получаю синтаксическую ошибку при создании триггера. Не могли бы вы подтвердить?

0 голосов
/ 12 сентября 2018

Ошибка новичка. Я хотел, чтобы значение column_e изменялось при изменении значений из column_b, но я фактически отслеживал старые значения из column_b. Исправил это до:

create trigger "UPDATE_TABLES"
    after update of "COLUMN_B" on "TABLE1"
    referencing new row as new, old row as old
    for each row 
begin
    update "TABLE2"
    set "COLUMN_E" = 'my new value'
    where :new."COLUMN_B" = '100' and "TABLE1"."ID" = :old."ID";
end;

и это сработало!

...