在触发事件期间评估日期时间寄存器

时间:2019-01-20 15:57:08

标签: stored-procedures triggers db2 db2-zos

我正在测试日期时间特殊寄存器(陈述为here)的以下行为

  

如果使用了日期时间特殊寄存器的SQL语句   在用户定义的函数或存储过程中   触发器的范围,Db2将时间戳用于触发SQL   语句来确定特殊寄存器的值。

因此,我创建了一个带有时间戳字段的表,向该表和tamestamp列插入相同的10行的存储过程(本机sql)被赋予“当前时间戳”值。然后,我在其他一些表上创建了一个触发器(在插入触发器之后)。

结果是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 :(得分:1)

我的猜测是注释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语句除外。