在数据同步接口中,取数据时关联了多张表,取了不同表的不同字段,每次获取数据增量时,通过LAST_UPDATE_DATE最后更新时间字段来判断。但是,当需要取的数据来自多张表关联,或者是一个视图时,单纯根据某张表的LAST_UPDATE_DATE来判断该条数据是否该更新,显然不合理。
此时可使用ORACLE的函数:greatest( expr1, expr2, … expr_n )来获取多张表的最后更新时间的最大值,就可以满足要求。只要关联表中其中更新了一条数据,该行关联后的数据,都进行一次更新。
示例:获取供应商物料信息时,同时关联PO_ASL_ATTRIBUTES表以获取绩效标志。
SELECT PV.SEGMENT1 VENDOR_CODE,
PASL.ASL_ID,
PASL.USING_ORGANIZATION_ID,
PASL.OWNING_ORGANIZATION_ID,
PASL.VENDOR_BUSINESS_TYPE,
PASL.ASL_STATUS_ID,
GREATEST(PASL.LAST_UPDATE_DATE, PAA.LAST_UPDATE_DATE) LAST_UPDATE_DATE,
PASL.LAST_UPDATED_BY,
PASL.CREATION_DATE,
PASL.CREATED_BY,
PASL.VENDOR_ID,
PASL.ITEM_ID,
PASL.VENDOR_SITE_ID,
NVL(PAA.CONSIGNED_FROM_SUPPLIER_FLAG, 'N') CONSIGNED_FROM_SUPPLIER_FLAG
FROM PO_APPROVED_SUPPLIER_LIST PASL,
PO_ASL_ATTRIBUTES PAA,
PO_VENDORS PV
WHERE PASL.ASL_ID = PAA.ASL_ID
AND PASL.VENDOR_ID = PV.VENDOR_ID
GREATEST(PASL.LAST_UPDATE_DATE, PAA.LAST_UPDATE_DATE) LAST_UPDATE_DATE
获取供应商物料基本信息和存在寄销标志字段表的最大更新时间的更大的一个。这样,两张表,只有更新其中之一,对应的数据都会在数据同步时进行一次更新。