В моей исходной схеме базы данных есть скалярная функция, которую я использую для получения баланса указанной учетной записи.
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](https://i.stack.imgur.com/gJm2q.png)