Использование скалярных функций Oracle Data Integrator - PullRequest
0 голосов
/ 26 февраля 2019

В моей исходной схеме базы данных есть скалярная функция, которую я использую для получения баланса указанной учетной записи.

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 голосов
/ 08 мая 2019

Возможно, что вам нужно, это слишком индивидуально для использования предопределенного Oracle KM.

Я думаю, что решение состоит в том, чтобы использовать другой IKM, что он не использует DBLINK, вместо этого он использует соединение JDBC (подключается напрямую кисточник, через jdbc, определенный в физической схеме).

Таким образом, ваш код будет выполнен непосредственно на источнике, и функция будет распознана.

...