我正在测试日期时间特殊寄存器的以下行为(此处所述)
如果使用日期时间特殊寄存器的 SQL 语句是 在用户定义的函数或存储过程中,该函数或存储过程位于 触发器的作用域,Db2 使用触发 SQL 的时间戳 语句来确定特殊寄存器值。
所以我用时间戳字段创建了一个表,一个将相同的 10 行插入表中的存储过程(本机 sql),并且 tamestamp 列被赋予"当前时间戳"的值。然后我在其他某个表上创建了一个触发器(在插入触发器之后)。
结果是 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 适用
https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/sqlref/src/tpc/db2z_currenttimestamp.html#fntarg_1
如果此特殊寄存器在单个 SQL 语句中多次使用,或者在单个语句中与 CURRENT DATE 或 CURRENT TIME 一起使用,则所有值都基于单个时钟读数。
¹ 非原子多行 INSERT 或 MERGE 语句的情况除外。