oracle - merge实例一 同步业务员

对于merge句型,使用场景借用对日开发文档中一句话就是,对于目标表没有的数据新增,有的数据变化者更新。

MERGE INTO
  TBL_MEMBER TM                               -- 网站会员注册信息表
USING
  (
    SELECT
      SLS_CDE,                                -- 业务员代码对应员工代码
      DPT_CDE,                                -- 机构代码
      SLS_NME     AS NAME,                    -- 业务员名称
      SALEGRP_CDE   AS SALEGRPCODE,           -- 营销团队代码
      0 || SUBSTR(CTFCT_TYP,-1,2)    AS CTYPE,-- 证件类型
      CTFCT_NO    AS CNO,                     -- 证件号码
      C_TEL,                                  -- 电话
      SLS_TYP,                                -- 人员分类 合同、个人代理(系统员工) 其他、在职(代理人)
      BGN_TM,                                 -- 起始日期
      END_TM,                                 -- 终止日期
      CASE
        WHEN C_DEL IS NULL THEN '0'
          ELSE C_DEL                    
            END   C_DEL                       -- 逻辑删除标志 0-无效 1-有效
    FROM
      TBL_CS_SALES                            -- 业务员信息表
    WHERE
      SUBSTR(DPT_CDE,0,2) IN ('72','74')
  ) TS
ON (
    TM.USER_NAME = TS.SLS_CDE                 -- 业务员代码对应员工代码
    AND TM.DEPT_CODE = TS.DPT_CDE             -- 机构代码
  )
WHEN MATCHED THEN
    UPDATE
    SET
      TM.NAME = TS.NAME,                        -- 业务员名称
      TM.CERTIFICATE_TYPE = TS.CTYPE,           -- 证件类型
      TM.CERTIFICATE_NO = TS.CNO,               -- 证件号码
      TM.USED_FLAG = TS.C_DEL,
      TM.PASSWORD_MODIFIED_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT
    (
      TM.ID,
      TM.USER_NAME,
      TM.NAME,                                -- 业务员名称
      TM.PASSWORD,
      TM.RANDOM_STR,
      TM.DEPT_CODE,
      TM.CERTIFICATE_TYPE,                    -- 证件类型
      TM.CERTIFICATE_NO,                      -- 证件号码
      TM.MOBILE_PHONE,
      TM.PASSWORD_MODIFIED_DATE,
      TM.USED_FLAG,                           -- 是否可用 0-无效 1-有效
      TM.MEMBER_TYPE,                         -- 内部用户类别 0:业务员
      TM.ROLE_TYPE_CODE,                      -- 角色类型 2:内部用户
      TM.MEMBER_FLAG                          -- 用户标识 99:诉责险
     
    )
    VALUES
    (
      SEQ_TBL_MEMBER_ID.NEXTVAL,
      TS.SLS_CDE,                           -- 业务员代码对应员工代码
      TS.NAME,                              -- 业务员名称
      '56a5aa0561ddd3b88b924315043cf6fb',   -- 初始密码
      '6Umt',                               -- 盐码
      TS.DPT_CDE,                           -- 机构代码
      TS.CTYPE,                             -- 证件类型
      TS.CNO,                               -- 证件号码
      TS.C_TEL,
      SYSDATE,
      TS.C_DEL,
      '0',
      '2',
      '99'
    );

posted @ 2018-10-12 21:37  doc-li  阅读(141)  评论(0编辑  收藏  举报