Exemples SQLEXEC utilisant des paramètres

Ces exemples utilisent des procédures stockées et des requêtes avec des paramètres d'entrée et de sortie.

Remarque : des options SQLEXEC supplémentaires peuvent être utilisées lorsqu'une procédure ou une requête inclut des paramètres. Reportez-vous à SQLEXEC dans la référence des paramètres et des fonctions pour Oracle GoldenGate.

Exemple 9-3 SQLEXEC avec une procédure stockée

Cet exemple utilise SQLEXEC pour exécuter une procédure stockée nommée LOOKUP qui exécute une requête afin de renvoyer une description basée sur un code. Il met ensuite en correspondance les résultats avec une colonne cible nommée 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;

Contenu de l'instruction 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 exécute la procédure stockée LOOKUP. Dans la clause SQLEXEC, l'instruction PARAMS (code_param = account_code) identifie code_param comme paramètre de procédure pour accepter l'entrée de la colonne account_code dans la table account.

Le processus Replicat exécute la procédure stockée LOOKUP avant d'exécuter le mapping de colonne, afin que la clause COLMAP puisse extraire et mettre en correspondance les résultats avec la colonne newacct_val.

Exemple 9-4 SQLEXEC avec une requête

Cet exemple implémente la même logique que celle utilisée dans l'exemple précédent, mais il exécute une requête SQL au lieu d'une procédure stockée et utilise la fonction @GETVAL dans le mapping de colonnes.

Une requête doit être sur une ligne. Pour fractionner une instruction de paramètre Oracle GoldenGate en plusieurs lignes, une esperluette (&) est requise.

Requête pour une base de données 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));

Requête pour une base de données non 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));