Oracle Data Integrator 标量函数用法

标签 oracle etl oracle-data-integrator

我的源数据库架构中有一个标量函数,我使用它来获取指定帐户的余额。

NVL(MYGL.F_GET_LAST_ACC_BALANCE(ACCOUNTS.ACC_NO, TRUNC(SYSDATE), 1),0)

在 ODI 映射中,我想使用此函数来获取帐户余额,然后将它们加载到我的 DWH 数据库中。

我正在将 IKM Oracle Insert 与 DbLink 结合使用。

我尝试在映射内使用 EXPRESSION,但这并没有给我结果,因为 ODI 尝试在 DWH 端而不是源端执行 MYGL.F_GET_LAST_ACC_BALANCEMYGL.F_GET_LAST_ACC_BALANCE 在源数据库中定义。

这是生成的查询

INSERT 
  /*+  APPEND PARALLEL  */ 
  INTO DWH.FACT_ACCOUNTS
  (
    REPORT_DATE ,
    ACC_NO ,
    ACC_PROD_CODE ,
    REAL_BALANCE ,
    LAST_BALANCE 
  ) 
SELECT 
  TRUNC(SYSDATE) ,
  ACCOUNTS.ACC_NO ,
  ACCOUNTS.ACC_PROD_CODE ,
  ACCOUNTS.ACC_BALANCE ,
  (NVL(MYGL.F_GET_LAST_ACC_BALANCE(ACCOUNTS.ACC_NO, TRUNC(SYSDATE), 1),0))  
FROM 
  <schema>.<table>@<dblink_to_source> ACCOUNTS   

它需要什么

INSERT 
  /*+  APPEND PARALLEL  */ 
  INTO DWH.FACT_ACCOUNTS
  (
    REPORT_DATE ,
    ACC_NO ,
    ACC_PROD_CODE ,
    REAL_BALANCE ,
    LAST_BALANCE 
  ) 
SELECT 
  TRUNC(SYSDATE) ,
  ACCOUNTS.ACC_NO ,
  ACCOUNTS.ACC_PROD_CODE ,
  ACCOUNTS.ACC_BALANCE ,
  (NVL(MYGL.F_GET_LAST_ACC_BALANCE@<dblink_to_source>(ACCOUNTS.ACC_NO, TRUNC(SYSDATE), 1),0))  
FROM 
  <schema>.<table>@<dblink_to_source> ACCOUNTS  

enter image description here

最佳答案

可能您需要的东西对于使用预定义的 Oracle KM 来说太自定义了。

我认为解决方案是使用另一个 IKM,它不使用 DBLINK,而是使用 JDBC 连接(通过物理模式中定义的 jdbc 直接连接到源)。

这样,您的代码将直接在源上执行,并且函数将被识别。

关于Oracle Data Integrator 标量函数用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54887253/

相关文章:

insert - Bigquery如何安排每周插入作业

sql - Oracle - 将列设置为 NULL 不会删除 CHECK 约束

java - JPA 查询 - JOIN 子句

sql - Oracle 中的 INSTR 和 LIKE 有什么区别?

c# - 人们如何将大量数据 (ETL) 从 ASP.NET 网站导入数据库?

ssis - 什么是主数据?

oracle-data-integrator - ODI 的 Java ee 代理

linux - 无法使用 ODIExportMaster 工具创建目录

c# - 在 Entity Framework 中参数化原始 Oracle SQL 查询