Ibm midrange AS400物理文件记录上次更新的时间戳

Ibm midrange AS400物理文件记录上次更新的时间戳,ibm-midrange,database-trigger,rpgle,Ibm Midrange,Database Trigger,Rpgle,我正在尝试向AS400上的旧物理文件添加最后更新的时间戳。这个物理文件是用DDS编写的。我已经在时间戳字段中添加了时间戳,但是当记录被修改时,我无法让它自动更新为当前时间戳 我已经尝试创建一个rpgletrigger程序,它在触发器缓冲区的后映像中设置字段的时间戳。然而,这个变化并没有反映在实际的文件中,因为我相信触发器缓冲区是一个只用于输入的引用 有没有人知道如何在每条记录上获得一个时间戳,当对该记录进行更改时,该时间戳会自动更新 谢谢大家! 编辑:我已经发布了应该在触发器程序中处理时间戳更新

我正在尝试向AS400上的旧物理文件添加最后更新的时间戳。这个物理文件是用DDS编写的。我已经在时间戳字段中添加了时间戳,但是当记录被修改时,我无法让它自动更新为当前时间戳

我已经尝试创建一个rpgletrigger程序,它在触发器缓冲区的后映像中设置字段的时间戳。然而,这个变化并没有反映在实际的文件中,因为我相信触发器缓冲区是一个只用于输入的引用

有没有人知道如何在每条记录上获得一个时间戳,当对该记录进行更改时,该时间戳会自动更新

谢谢大家!

编辑:我已经发布了应该在触发器程序中处理时间戳更新的代码。我是否没有正确设置触发器缓冲区

 d PGMNAME         pr
 d  TrgBuffer_                         like(TrgBuffer)
 d  TrgBufLen_                         like(TrgBufLen)

 d BefImg        e ds                  extname(FILENAME) prefix(b_)
 d AftImg        e ds                  extname(FILENAME) prefix(a_)

 d FILENAMER       pi
 d  p$TrgBuffer                        like(TrgBuffer)
 d  p$TrgBufLen                        like(TrgBufLen)

    TrgBuffer = p$TrgBuffer;
    TrgBufLen = p$TrgBufLen;

    NRO = NewRecOff + 1;
    NRL = NewRecLen;
    ORO = OrgRecOff + 1;
    ORL = OrgRecLen;

    // Set Before / After Images
    BefImg = %subst(TrgBuffer:ORO:ORL);
    AftImg = %subst(TrgBuffer:NRO:NRL);

    select;

    // Update
     when TrgEvent = '3';

     // Set last updated timestamp on record.
     a_lstupd = %timestamp();
     %subst(TrgBuffer:NRO:NRL) = AftImg;
     p$TrgBuffer = TrgBuffer;      

您不必坚持使用DDS

您可以使用iNav或更新的ACS模式工具为最初使用DDS定义的PF生成SQL DDL

那么,这是一个简单的补充问题

LAST_UPDATED for column LSTUPD
  timestamp not null
  generated always 
  for each row on update 
  as row change timestamp
为此,可以使用SQL
ALTERTABLE
语句将列添加到现有PF中


在操作系统对象级别,DDS PF和SQL表之间几乎没有什么区别。它们之间的区别是内部的,而不是外部的。

在“插入到更新”触发器上,您必须更新后映像才能进行更改。触发器缓冲区不是只读引用。如果您正在为触发器程序使用ILE语言,还有其他注意事项。您可以发布您创建的触发器程序吗?您可以将物理文件转换为DDL吗?我已经为触发器程序添加了代码。我是否正确重置了缓冲区?当我调试时,更改显示在缓冲区中,但实际文件在程序运行后保持不变。在这种情况下,不能将其切换为DDL。我似乎不能只向现有表中添加行更改列。@danny117抱歉,在更新时忘记了
,答案已被更正。我没有写入原始文件,将其转换为DDL不是此特定文件的选项。我已经为我的触发器程序添加了代码。我是否正确重置后映像?您需要一个前触发器来更改写入文件的内容。一点也不迟。