Aspen-Tech KB:100949 如何正确地使用SQLplus将旧数据添加到新InfoPlus.21记录

解决办法ID:                    100949

产品:                                 SQLplus

主题:                                 Software

标题:                                 如何正确地使用SQLplus将旧数据添加到新InfoPlus.21记录

 

与这篇文档相关的解决方案、FAQ或缺陷文章

技术要点:102892              如何使用SQLplus将数据插入IP.21记录的历史重复区域

技术要点:103040              如何插入比记录创建时间早的数据;如何使用xoldestok

技术要点:107025              如何使用VB在历史记录中插入带有指定时间戳的数据

 

技术要点文本:

编辑时间:2000-10-06 10:46PM

 

适用版本:

-------------------------------------------

InfoPlus.21 v1.1 及以后版本

 

问题陈述:

-------------------------------------------

如何使用SQLplusQTIMESTAMP函数将旧数据添加到新的InfoPlus.21记录中

 

解决办法:

--------------------

 

有一种想法认为可以使用典型的SQLplus update语句来替换一个记录的IP_INPUT_VALUEIP_INPUT_TIME字段的值,例如:

UPDATE ip_analogdef

       SET ip_input_time = ’21-MAY-99 10:00:00.0’,

       WHERE name = ‘atcai’;

这样做的结果是更改了IP_INPUT_VALUE的值,并经过压缩后传送给了IP_VALUEIP_VALUE_TIME值虽然也被更新,但是IP_VALUE_TIME的值是当前时间,而这不是我们想要的结果。

 

如何处理这个问题?可以通过使用SQLplus提供的QTIMESTAMP函数来解决。例如:

1  确保插入的数据是按照日期时间的顺序。

2  以如下方式使用SQLplus语句:

UPDATE ip_analogdef

              SET ip_input_value = 1,

              QTIMESTAMP(ip_input_value) = ‘2 1-MAY-99 09:00:00.0’

WHERE name = ‘atcai

 

如果是对一个没有历史数据的新记录,或者历史数据中没有大于要插入数据日期的记录,使用上面的语句能够在当前时刻将数据插入到历史数据中。但如果是这两个情况中的任何一个,则需要使用在#102892中描述的“插入数据到历史记录”方法。

注意上述的QTIMESTAMP()函数,以及传递给它的参数是一个字段数据类型。关于该函数和其它质量状态函数的内容请参见SQLplus用户手册或在线帮助。

 

注意:如果碰到类似如下的错误消息。

Error writing to “   IP_INPUT_VALUE”: Data changed but no history generated (bad key time stamp) as line <#>.

则很可能需要增加历史库中PAST时间参数的小时数。从管理员工具(Administrator)中右键单击历史库名称选择Properties,增加PAST参数的值以便能够覆盖到要插入数据的时间,为了使所作的修改生效,必须停止并重新启动数据库。如果记录中要包含比创建它的时间点还早的数据,则需要使用XOLDESTOK.EXE工具。该工具位于code目录中,在IP.21 V1.1的发行注释和#103040解决方案中描述了有关于XOLDESTOK.EXE工具使用的说明。

 

关键词

--------------------

QTIMESTAMP

History

Old data

posted on 2004-05-31 14:25  niuke  阅读(1891)  评论(3)    收藏  举报

导航