zoukankan      html  css  js  c++  java
  • GoldenGate使用SQLEXEC和GETVAL实现码表关联

    使用OGG中的SQLEXEC参数,可以执行SQL语句或存储过程,再加上@GETVAL函数,可以在目标端获取源表没有的字段值。比如,源端有一个事实表和一个代码表COUNTRY_CODES,代码表中有两个字段:country_name 和 country_id,事实表即customers表,里面只有country_id字段。

    我们希望在目标端的customers中,增加一列country_name字段,并在OGG同步的过程中,针对这个字段赋值,这样在目标端可以直接select customers查看数据,不用再关联COUNTRY_CODES表。

    下面分别演示使用SQL语句和存储过程的实现方式。

    方法一,使用SQL语句

    以下使用SQL语句获取COUNTRY_NAME ,抽取进程参数:

    EXTRACT gavinext

    USERID idit_prd, PASSWORD idit_prd

    RMTHOST indb02, MGRPORT 7809

    RMTTRAIL ./dirdat/xx

    TABLE idit_prd.customers;


    以下是目标端参数:

    REPLICAT gavinrep

    SETENV (NLS_LANG=”AMERICAN_AMERICA.WE8ISO8859P1″)

    SETENV (ORACLE_SID=GGDB2)

    ASSUMETARGETDEFS

    USERID idit_prd,PASSWORD idit_prd

    MAP idit_prd.customers, TARGET idit_prd.customers, &

    SQLEXEC (ID lookup, &

    QUERY “select country_name cname from country_code where country_id =:v_country_id”,&

    PARAMS (v_country_id = country_id)),&

    COLMAP (USEDEFAULTS, country_name = @GETVAL (lookup.cname) );


    方法二,使用存储过程

    定义一个SP基于country_id获取country_name, 如下:

    create or replace procedure get_country

    (v_country_id IN number, v_country_name OUT varchar2 )

    is

    begin

    select country_name into v_country_name from country_code where country_id= v_country_id;

    end;

    /


    以下演示如何在replicat中调用SP获取额外的字段值。

    REPLICAT gavinrep

    SETENV (NLS_LANG=”AMERICAN_AMERICA.WE8ISO8859P1″)

    SETENV (ORACLE_SID=GGDB2)

    ASSUMETARGETDEFS

    USERID idit_prd,PASSWORD idit_prd

    MAP idit_prd.customers, TARGET idit_prd.customers, &

    SQLEXEC (SPNAME GET_COUNTRY, &

    PARAMS (v_country_id = country_id)),&

    COLMAP (USEDEFAULTS, country_name = @getval (GET_COUNTRY.V_COUNTRY_NAME) );

    除了上面的应用,还可以获取多个字段计算后的值到目标字段,从而实现简单的ETL转换。

  • 相关阅读:
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    关于值类型与列类型不匹配,所需类型是 DataRow"的解决方案
    如何给excel设置密码
    Excel如何将大写字符转化为小写
    C#调用WebService(服务引用-xml)
  • 原文地址:https://www.cnblogs.com/margiex/p/8911101.html
Copyright © 2011-2022 走看看