我在我的源数据库模式中有一个标量函数,我使用它来获取指定帐户的余额。
NVL(MYGL.F_GET_LAST_ACC_BALANCE(ACCOUNTS.ACC_NO, TRUNC(SYSDATE), 1),0)在ODI映射中,我想使用此函数来获取帐户余额,然后将它们加载到我的DWH DB中。
我正在使用IKM Oracle Insert和DbLink。
我尝试在映射中使用表达式,但是没有给出结果,因为ODI试图在DWH端而不是源代码端执行MYGL.F_GET_LAST_ACC_BALANCE。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

发布于 2019-05-08 15:05:09
也许你需要的是它对于使用预定义的Oracle KM来说太过定制了。
我认为一个解决方案是使用另一个IKM,它不使用DBLINK,而是使用JDBC连接(通过物理模式中定义的jdbc直接连接到源)。
这样,您的代码将直接在源代码上执行,并且该函数将被识别。
https://stackoverflow.com/questions/54887253
复制相似问题