【问题标题】:Oracle Data Integrator Scalar Function UsageOracle Data Integrator 标量函数用法
【发布时间】:2019-02-26 14:02:01
【问题描述】:

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

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  

【问题讨论】:

    标签: oracle etl oracle-data-integrator


    【解决方案1】:

    对于使用预定义的 Oracle KM,您可能需要它太定制化了。

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

    这样,你的代码会直接在源码上执行,函数会被识别。

    【讨论】:

    • 您可以提供具体的 IKM 建议吗?还是需要自己编写或修改?
    • 你对源和目标有什么技术?
    • 它们都在 Oracle Database 11.2.0.4 上
    • @DervişKayımbaşıoğlu,尝试:IKM Oracle 插入、IKM Oracle 负载、IKM SQL 插入或 IKM Oracle 负载
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多