如何在 Informatica 中的同一映射中实现插入、更新和删除

发布于 2025-01-16 23:57:14 字数 716 浏览 0 评论 0原文

我们有一个要求,必须在 Informatica 中的相同映射下实现插入、更新和删除逻辑。源表和目标表结构相同,没有区别。目标中没有主键,我们将 PERSON_KEY 定义为 Informatica 映射中的主键来更新记录,我当前正在使用目标表的查看并比较记录,并且在路由器转换中,使用以下逻辑用于插入和更新。我还提供了表结构供参考。

注意:源和目标来自不同的数据库

INSERT : 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)

We have a requirement where we have to Implement Insert, Update and delete Logic under the Same Mapping In Informatica. The Source and target table structures are the same and there is no difference. There is no primary key in the target and we are Defining PERSON_KEY as the primary key in the Informatica mapping to update records, I am currently using a look upon the target table and comparing the records and in the router transformation, The Following logic is used for insert and Updates. I have also provided the Table structure for reference.

NOTE: The Source and target are from Different Database

INSERT : ISNULL(LKP_PERSON_KEY)
UPDATE : 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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北方的韩爷 2025-01-23 23:57:15

使用更新策略

确保 PERSON_KEY 在目标设计器中定义为 PK。
然后在映射中的目标之前添加表达式转换。拉入所有数据列和 PERSON_KEY、LKP_PERSON_KEY 列。使用以下逻辑创建一个列。我假设,如果以上条件都不满足,则删除数据。

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
)) 

然后将所有必需的列添加到目标。

在会话中 - 请将加载策略设置为数据驱动

映射应该看起来像 -

.... --> EXP-->UPD-->TGT

use update strategy.

Make sure PERSON_KEY is defined as PK in target designer.
Then in the mapping, right before target, add expression transformation. Pull in all data columns and PERSON_KEY,LKP_PERSON_KEY columns. Create a column with below logic. I assumed, if none of above condition met, delete the data.

out_insert_update_flag = 
IIF(ISNULL(LKP_PERSON_KEY), 'INSERT',IIF(PERSON_KEY=LKP_PERSON_KEY,'UPDATE','DELETE')
)

Then add the update strategy between expression transformation and target. Pull in all required columns and out_insert_update_flag. And create a logic like this-

IIF(out_insert_update_flag ='INSERT', DD_INSERT, IIF(out_insert_update_flag='UPDATE', DD_UPDATE, DD_DELETE
)) 

Then add all required columns to target.

In session - pls set load strategy to data driven.

Mapping should look like -

.... --> EXP-->UPD-->TGT
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文