Оценка регистра даты и времени во время события триггера - PullRequest
0 голосов
/ 20 января 2019

Я тестировал следующее поведение для специального регистра даты и времени (указано здесь )

Если оператор SQL, в котором используется специальный регистр даты и времени, находится в пользовательском определениифункция или хранимая процедура, которая находится в области действия триггера, Db2 использует временную метку для запускающего оператора SQL, чтобы определить значение специального регистра.Процедура (нативный sql), которая вставляет те же 10 строк в таблицу и столбец tamestamp, получает значение "current timestamp".Затем я создал триггер для какой-то другой таблицы (после триггера вставки).

Результат - 10 строк с увеличением отметки времени.Я ожидал, что отметка времени будет такой же, как в моей интерпретации хранимая процедура находилась в области действия триггера.

Можете ли вы помочь мне, что означает это утверждение?


create trigger date_check 
    after insert on test
    for each row mode db2sql
    call date_sp2() 

create procedure date_sp2()
     language sql
     BEGIN
        declare i smallint default 0; 
        my_loop: LOOP 
          insert into empty_char values('Y','Y','Y','Y',current date, current timestamp);
          SET I = I + 1;
          IF I = 10 THEN LEAVE my_loop; 
          END IF;
        END LOOP my_loop;
     END

1 Ответ

0 голосов
/ 22 января 2019

Я предполагаю, что применяется примечание 1

https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/sqlref/src/tpc/db2z_currenttimestamp.html#fntarg_1

Если этот специальный регистр используется более одного раза в одном операторе SQL или используется с CURRENT DATE илиТЕКУЩЕЕ ВРЕМЯ в пределах одного оператора, все значения основаны на одном чтении часов.100

¹ За исключением случая неатомарного оператора INSERT или MERGE из нескольких строк.

...