我正在尝试将最后更新的时间戳添加到AS400上的旧物理文件中。此物理文件是用DDS编写的。我已经在timestamp字段中添加了但是当记录被修改时我无法自动更新到当前时间戳。
我尝试创建一个RPGLE触发程序,该程序在触发缓冲区的后映像中设置字段的时间戳。但是这个更改没有反映在实际文件中,因为我认为触发缓冲区是一个仅输入引用。
是否有人对如何在每条记录上获取时间戳有任何想法,这些记录会在对该记录进行更改时自动更新?
谢谢!
编辑:我已经发布了应该在触发器程序中处理时间戳更新的代码。我没有正确设置触发缓冲区吗?
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;
答案 0 :(得分:3)
您不必坚持使用DDS。
您可以使用iNav或较新的ACS Schema工具为最初使用DDS定义的PF生成SQL DDL。
然后添加
是一件简单的事情LAST_UPDATED for column LSTUPD
timestamp not null
generated always
for each row on update
as row change timestamp
就此而言,您可以使用SQL ALTER TABLE
语句将列添加到现有PF。
在操作系统对象级别,DDS PF和SQL表之间的差别很小。它存在的差异是内部的,而不是任何使用它的外部因素。