我在 Maximo 7.5 中有两个表。
表 A:在表 A 中具有属性 WORKORDERNUM、EXPECTEDTIME 和 FINISHTIME。 表 B:在表 B 中具有属性 WORKNUM 和 STATUS。
我想做的是: 如果 FINISHTIME > EXPECTEDTIME,则将表 B 中的 STATUS 更新为“NOTGOOD”,否则什么也不做。 我为此创建了一个 CronTask,每五分钟运行一次。
现在我能想到的是两种方法。
1.循环遍历所有表A,在循环中每次对表B执行一次数据库查询。
示例代码如下:
MboSetRemote TableA = mxs.getMboSet("TABLEA", ui);
MboSetRemote TableB = mxs.getMboSet("TABLEB", ui);
TableA.setWhere("FINISHTIME > EXPECTEDTIME");
TableA.reset();
TableB.setWhere("");
TableB.reset();
MboSet TableARow = null;
MboSet TableBRow = null;
//now it will give a list of entries. Which needs to be matched with Table B and values be updated in Table B STATUS.
while ((TableARow = TableA.getMbo(i)) != null)
{
int A = TableA.getString("WONUM");
while((TableBRow = TableB.getMbo(i)) != null)
int B = TableB.getString("WONUM");
if (A == B){
//set SATUS etc}
}
TableB.save();
TableA.save();
2. 循环遍历所有表 A。在循环内执行每次比较表 B 的值。
MboSetRemote TableA = mxs.getMboSet("TABLEA", ui);
MboSetRemote TableB = mxs.getMboSet("TABLEB", ui);
TableA.setWhere("FINISHTIME > EXPECTEDTIME");
TableA.reset();
MboSet TableARow = null;
//now it will give a list of entries. Which needs to be matched with Table B and values be updated in Table B STATUS.
while ((TableARow = TableA.getMbo(i)) != null)
{
TableB.setWhere("WONUM= TABLEA.WONUM");
TableB.reset();
//set SATUS etc
TableB.save();
}
TableA.save();
哪个更好、更划算?
还有什么建议吗?
最佳答案
编写和使用自动化脚本很有趣,但它们并不总是完成工作的最佳工具。在这种情况下,我会使用
Escalation
在TableA
中搜索FINISHTIME > EXPECTEDTIME
数据库配置
中的关系
,从TableA
到TableB
,其中wonum = :wonum and siteid = :siteid
- 一个基于
TableA
的Action
,它使用标准符号中的上述Relationship
来设置TableB
中的状态
与所介绍的方法相比,此方法的主要优点是可升级性和可支持性。可升级性,因为不涉及可以弃用的代码,并且因为所有配置都是可升级的,以及可支持性,因为 IBM 支持配置但不支持定制。 (对于自动化脚本,支持您编写它们的能力,但不支持您的代码本身。这与数据库配置中的关系相同。)
关于java - 在 Java 中比较两个表列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34925603/