如何在 Informatica 的同一个映射中实现插入、更新和删除
How to Implement Insert , Update and Delete In the Same Mapping in Informatica
我们有一个要求,我们必须在 Informatica 中的相同映射下实现插入、更新和删除逻辑。 Source 和 target table 结构相同,没有区别。目标中没有主键,我们将 PERSON_KEY 定义为 Informatica 映射中的主键以更新记录,我目前正在查看目标 table 并比较记录和路由器转换,以下逻辑用于插入和更新。我也提供了Table结构供参考
注意:源和目标来自不同的数据库
插入:ISNULL(LKP_PERSON_KEY)
更新:IIF(PERSON_KEY=LKP_PERSON_KEY,TRUE,FALSE)
PERSON_KEY NUMBER(7, 0) ,
SOURCE_CD VARCHAR2(16 CHAR) ,
SOURCE_INSTANCE NUMBER(2, 0) ,
TYPE_CD VARCHAR2(32 BYTE) ,
TYPE_INSTANCE NUMBER(2, 0) ,
VALUE VARCHAR2(255 CHAR) ,
VALUE_TEXT VARCHAR2(255 CHAR) ,
UPDATE_SOURCE VARCHAR2(32 CHAR) ,
UPDATE_ACCOUNT VARCHAR2(32 CHAR) ,
UPDATE_DATETIME DATE ,
UPDATE_SUNETID VARCHAR2(64 CHAR) ,
UPDATE_COMMENT VARCHAR2(255 CHAR)
使用update strategy
.
确保 PERSON_KEY 在目标设计器中定义为 PK。
然后在映射中,就在目标之前,添加表达式转换。拉入所有数据列和 PERSON_KEY,LKP_PERSON_KEY 列。创建具有以下逻辑的列。我假设,如果满足上述条件none,则删除数据。
out_insert_update_flag =
IIF(ISNULL(LKP_PERSON_KEY), 'INSERT',IIF(PERSON_KEY=LKP_PERSON_KEY,'UPDATE','DELETE')
)
然后添加表达式转换和目标之间的更新策略。拉入所有必需的列和 out_insert_update_flag。并创建这样的逻辑-
IIF(out_insert_update_flag ='INSERT', DD_INSERT, IIF(out_insert_update_flag='UPDATE', DD_UPDATE, DD_DELETE
))
然后将所有需要的列添加到目标。
在会话中 - 请将加载策略设置为 data driven
。
映射应类似于 -
.... --> EXP-->UPD-->TGT
我们有一个要求,我们必须在 Informatica 中的相同映射下实现插入、更新和删除逻辑。 Source 和 target table 结构相同,没有区别。目标中没有主键,我们将 PERSON_KEY 定义为 Informatica 映射中的主键以更新记录,我目前正在查看目标 table 并比较记录和路由器转换,以下逻辑用于插入和更新。我也提供了Table结构供参考
注意:源和目标来自不同的数据库
插入:ISNULL(LKP_PERSON_KEY)
更新:IIF(PERSON_KEY=LKP_PERSON_KEY,TRUE,FALSE)
PERSON_KEY NUMBER(7, 0) ,
SOURCE_CD VARCHAR2(16 CHAR) ,
SOURCE_INSTANCE NUMBER(2, 0) ,
TYPE_CD VARCHAR2(32 BYTE) ,
TYPE_INSTANCE NUMBER(2, 0) ,
VALUE VARCHAR2(255 CHAR) ,
VALUE_TEXT VARCHAR2(255 CHAR) ,
UPDATE_SOURCE VARCHAR2(32 CHAR) ,
UPDATE_ACCOUNT VARCHAR2(32 CHAR) ,
UPDATE_DATETIME DATE ,
UPDATE_SUNETID VARCHAR2(64 CHAR) ,
UPDATE_COMMENT VARCHAR2(255 CHAR)
使用update strategy
.
确保 PERSON_KEY 在目标设计器中定义为 PK。
然后在映射中,就在目标之前,添加表达式转换。拉入所有数据列和 PERSON_KEY,LKP_PERSON_KEY 列。创建具有以下逻辑的列。我假设,如果满足上述条件none,则删除数据。
out_insert_update_flag =
IIF(ISNULL(LKP_PERSON_KEY), 'INSERT',IIF(PERSON_KEY=LKP_PERSON_KEY,'UPDATE','DELETE')
)
然后添加表达式转换和目标之间的更新策略。拉入所有必需的列和 out_insert_update_flag。并创建这样的逻辑-
IIF(out_insert_update_flag ='INSERT', DD_INSERT, IIF(out_insert_update_flag='UPDATE', DD_UPDATE, DD_DELETE
))
然后将所有需要的列添加到目标。
在会话中 - 请将加载策略设置为 data driven
。
映射应类似于 -
.... --> EXP-->UPD-->TGT