To return expected results, you can:
Reduce the number of search terms.
Each term you use focuses the search further.
Check your spelling.
A single misspelled or incorrectly typed term can change your result.
Try substituting synonyms for your original terms.
For example, instead of searching for "java classes", try "java training"
Did you search for an IBM acquired or sold product ?
If so, follow the appropriate link below to find the content you need.
曾经有细心的客户反映过,通过
RPGLE中的内嵌函数%TIMESTAMP,无法获得微秒级的数据。的确,这是目前
RPGLE
中该内嵌函数的一个
限
制,只能获得毫秒级的数据,尽管,RPGLE的TIMESTAMP数据类型本身可以支持
到
微秒级的精
度。如代码示例一所示。
通过该段代码,我们可以得到如结果示例一中的结果,最后三位是
0。
那么,既然前面提到过,
RPGLE中,时间戳TIMESTAMP数据类型,本身是支持微秒级的,我们如何获取到微秒级的数据呢?方法
可以有好
几
种。首先,最简单的,我们可以通过嵌入式
SQL语句来实现,如代码示例二所示:
该段代码的运行结果请见结果示例二:
其次,如果不考虑
SQL,还可以通过调用系统函数 gettimeofday() 来实现。相关的信息中心的链接为:
http://pic.dhe.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/apis/gettod.htm
。
该链接中提供了一个
C语言实现的例子。用户可以稍作改动,
让该函数返回调用API所获得的时间戳,然后通过
ILE的混合编程来在
RPG
语言中
调
用该C语言编写的函数。也可以直接编写RPGLE程序来调
用这个系统API。
最后,用户还可以通过
API QWCRSVAL来取
系统值
QDATETIME来获取
20位精确到微秒级的时间戳。其结果的格式为:
YYYYMMDDHHNNSSXXXXXX,
其中YYYY为年份, MM是月份, DD是日期, HH是小时, NN 是分, SS是秒, XXXXXX是微秒。
该API可参见:
http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/apis/qwcrsval.htm
请注意,尽管可以获取微秒级的时间戳,我们仍然不建议客户用时间戳作为交易的唯一标识。因为在并发交易中,取到完全相同的时
间
戳,也还是有可能的,尽管概率很小。
接下来,我们来探讨下时间戳和性能相关的话题。日期
DATE,时间TIME和时间戳
TIMESTAMP
相关的操作,会有些CPU的消耗,因为在每次用到这些字段时,都会发生触发关于日期,时间的合法性检查。如果程序中不停有这些数
据
类型的字段的操作,那么,还是可以考虑想办法避免因为这些操作而带来的CPU开销的。在6.1和7.1中,都提供了一个新的控制表(H表)
关
键字VALIDATE(*NODATETIME),请参考代码示例三。
代码示例三
该新功能需要安装相应的
PTF,6.1为
SI43988,7.1为SI43157。指定该关键字后,可以让RPGLE编译器将这些日期,时间,时间戳
类型
的
字段视为文字数值数据,从而避免相应的合法性检查。这个关键字需要小心使用,因为一旦使用,将引入出现非法数据的风险,
并且
非
法
数据有可能随着程序逻辑的处理,传染给其他字段或变量。所以,对于该关键字,我们推荐以下适用场景:
1、仅用于从未发生过日期,时间或时间戳数据非法错误的那些程序模块。
2、当某一数值首次赋值给这种类型字段之前,使用是否存在而强行进行合法性检查。
当发生大量的涉及这类数据类型的
I/O,该关键字能明显提高应用程序的性能表现。
作者:
钟嘉田:
zhongjt@cn.ibm.com
了解更多关于IBM i 的信息,请关注IBM i 新浪官方微博
@IBMiChina
。