使用參數的 SQLEXEC 範例
這些範例使用預存程序與查詢搭配輸入與輸出參數。
注意:當程序或查詢包含參數時,可以使用其他 SQLEXEC 選項。請參閱 Oracle GoldenGate 的參數和函數參照中的 SQLEXEC 。
範例 9-3 具有預存程序的 SQLEXEC
此範例使用 SQLEXEC 來執行名為 LOOKUP 的預存程序,該程序會執行查詢以根據代碼傳回描述。然後將結果對應至名為 NEWACCT_VAL 的目標資料欄。
CREATE OR REPLACE PROCEDURE LOOKUP
(CODE_PARAM IN VARCHAR2, DESC_PARAM OUT VARCHAR2)
BEGIN
SELECT DESC_COL
INTO DESC_PARAM
FROM LOOKUP_TABLE
WHERE CODE_COL = CODE_PARAM
END;
MAP 敘述句的內容:
MAP sales.account, TARGET sales.newacct, &
SQLEXEC (SPNAME lookup, PARAMS (code_param = account_code)), &
COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);
SQLEXEC 會執行 LOOKUP 預存程序。在 SQLEXEC 子句中,PARAMS (code_param = account_code) 敘述句會將 code_param 識別為接受 account 表格中 account_code 資料欄輸入的程序參數。
Replicat 會在執行資料欄對應之前先執行 LOOKUP 預存程序,讓 COLMAP 子句可以擷取結果並將其對應至 newacct_val 資料欄。
範例 9-4 含有查詢的 SQLEXEC
此範例實行的邏輯與上一個範例所使用的邏輯相同,但它會執行 SQL 查詢,而非預存程序,並使用資料欄對應中的 @GETVAL 函數。
查詢必須在一行上。若要將 Oracle GoldenGate 參數敘述句分割成多行,必須使用 & 符號 (&) 行終止字元。
查詢 Oracle AI Database:
MAP sales.account, TARGET sales.newacct, &
SQLEXEC (ID lookup, &
QUERY 'select desc_col desc_param from lookup_table where code_col = :code_param', &
PARAMS (code_param = account_code)), &
COLMAP (newacct_id = account_id, newacct_val = &
@getval (lookup.desc_param));
查詢非 Oracle AI Database:
MAP sales.account, TARGET sales.newacct, &
SQLEXEC (ID lookup, &
QUERY 'select desc_col desc_param from lookup_table where code_col = ?', &
PARAMS (p1 = account_code)), &
COLMAP (newacct_id = account_id, newacct_val = &
@getval (lookup.desc_param));