Оценка регистра даты и времени во время события триггера

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

Если оператор SQL, в котором используется специальный регистр даты и времени, находится в пользовательской функции или хранимой процедуре, которая находится в области действия триггера, Db2 использует метку времени для запускающего оператора SQL, чтобы определить значение специального регистра.

Поэтому я создал таблицу с полем временной метки, хранимой процедурой (native 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 ответ

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

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

Если этот специальный регистр используется более одного раза в одном операторе SQL или используется с CURRENT DATE или CURRENT TIME в одном операторе, все значения основаны на одном чтении часов. ¹

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

Другие вопросы по тегам