Оценка регистра даты и времени во время события триггера
Я тестировал следующее поведение для специального регистра 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.