【问题标题】:Evaluating datetime register during trigger event在触发事件期间评估日期时间寄存器
【发布时间】:2019-01-20 15:57:08
【问题描述】:

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

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

所以我创建了一个带有时间戳字段的表,一个存储过程(本机 sql)将相同的 10 行插入到表中,并且 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

【问题讨论】:

    标签: stored-procedures triggers db2 db2-zos


    【解决方案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 语句的情况除外。

    【讨论】:

    • 我很欣赏你的研究,但它并不完全令人满意。老实说,我正在等待一个带有触发器和 udf/proc 的场景,其中证明时间戳是派生一次的。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多