Oracle Data Integrator标量函数用法

时间:2019-02-26 14:02:01

标签: 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尝试在MYGL.F_GET_LAST_ACC_BALANCE端而不是源端执行DWH,因此没有得到结果。 MYGL.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

1 个答案:

答案 0 :(得分:0)

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

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

通过这种方式,您的代码将直接在源代码上执行,并且该函数将被识别。