基于结果的db2递归多次更新

基于结果的db2递归多次更新,db2,sql-update,recursive-query,Db2,Sql Update,Recursive Query,我想对递归查询返回的结果集执行各种更新,而不必为每次更新重写递归查询 是否有一种方法可以将每个更新彼此区分开来 这是我的密码: WITH IDS (Level, $COID, $COID_REF, $CONAME) AS (SELECT 0, x.$COID, x.$COID_REF, x.$CONAME FROM MCINT.$EXT x WHERE $COID = X'1234567890123456' UNION ALL SELECT B.Level + 1,

我想对递归查询返回的结果集执行各种更新,而不必为每次更新重写递归查询

是否有一种方法可以将每个更新彼此区分开来

这是我的密码:

WITH IDS (Level, $COID, $COID_REF, $CONAME) AS
  (SELECT 0, x.$COID, x.$COID_REF, x.$CONAME
    FROM MCINT.$EXT x
    WHERE $COID = X'1234567890123456'
  UNION ALL
  SELECT B.Level + 1, c.$COID, c.$COID_REF, c.$CONAME
    FROM IDS B, MCINT.$EXT C
    WHERE B.$COID_REF = C.$COID AND B.Level < 30)

-- perform first update on ther result set
SELECT COUNT(*) AS updated_rows
  FROM  FINAL TABLE
    (UPDATE MCINT.$EXT_LF 
        SET $CUR_ACC_MET_DATA = REPLACE($CUR_ACC_MET_DATA, 'p_mcint', 't_mcint')
     WHERE $COID IN (SELECT $COID_REF FROM IDS));

-- second recursive scan
WITH IDS (Level, $COID, $COID_REF, $CONAME) AS
  (SELECT 0, x.$COID, x.$COID_REF, x.$CONAME
    FROM MCINT.$EXT x
    WHERE $COID = X'1234567890123456'
  UNION ALL
  SELECT B.Level + 1, c.$COID, c.$COID_REF, c.$CONAME
    FROM IDS B, MCINT.$EXT C
    WHERE B.$COID_REF = C.$COID AND B.Level < 30)

-- perform second update on the result set
SELECT COUNT(*) AS updated_rows
  FROM  FINAL TABLE
    (UPDATE MCINT.$EXT_LF 
        SET $CUR_ACC_MET_DATA = REPLACE($CUR_ACC_MET_DATA, 'p_xcdata', 't_xcdata')
     WHERE $COID IN (SELECT $COID_REF FROM IDS));

除非我遗漏了什么,否则这两种说法的不同之处在于:

SET $CUR_ACC_MET_DATA = REPLACE($CUR_ACC_MET_DATA, 'p_mcint', 't_mcint')
vs

如果是这种情况,您可能只需进行一次更新:

SET $CUR_ACC_MET_DATA = REPLACE(REPLACE($CUR_ACC_MET_DATA, 'p_mcint', 't_mcint'),
                                'p_xcdata', 't_xcdata')

很酷,谢谢,我不知道我能那样做。不是数据库专家,更不是db2专家。干杯
SET $CUR_ACC_MET_DATA = REPLACE(REPLACE($CUR_ACC_MET_DATA, 'p_mcint', 't_mcint'),
                                'p_xcdata', 't_xcdata')