728x90

윈드밀님 | 쿼리 | 2013-01-11 18:31:28


PMR을 했는데요. 여기도 올려봅니다. 

그리고 뒤에 local fix를 만든 분이 65살(IBM 정년 퇴임후 계속 일하고 있음.일본) 이란 것도 감동입니다.
우리도 그렇게 될 수 있을까요?

테스트 테이블 : create table xxx (c1 int);
[Fail SQL]
WITH ORGAN
(LVL)
AS
(
 SELECT 1 AS LVL
   FROM sysibm.sysdummy1 I
 UNION ALL
 SELECT P.LVL+1
   FROM ORGAN P
      , sysibm.sysdummy1 C
 WHERE P.LVL<=10
)
merge into xxx as t
using ORGAN as s
on(t.c1=s.lvl)
when matched then
 update set
  c1=s.lvl
when not matched then
 insert (c1)
 values (s.lvl)
;

[Local Fix SQL]
WITH ORGAN
(LVL)
AS
(
 SELECT 1 AS LVL
   FROM sysibm.sysdummy1 A
 UNION ALL
 SELECT B.LVL+1
   FROM ORGAN B
      , sysibm.sysdummy1 C
 WHERE B.LVL<=10
)

/*WHEN MATCHED 관련 UPDATE문을 수행하는 WITH SELECT문 */
, MATCHED
(UPDATED_ROWS)
AS
(
 SELECT COUNT(*) AS UPDATED_ROWS
   FROM FINAL TABLE
   (
   UPDATE xxx DD
      SET DD.c1 = ( SELECT AAA.LVL
                      FROM ORGAN AAA
                      WHERE AAA.LVL = DD.c1
                     )
    WHERE EXISTS ( SELECT BBB.LVL
                     FROM ORGAN BBB
                    WHERE BBB.LVL = DD.c1
                 )              
   ) D
)

/*WHEN NOT MATCHED 관련 INSERT문을 수행하는 WITH SELECT문 */
, NOT_MATCHED
(INSERTED_ROWS)
AS
(
 SELECT COUNT(*) AS INSERTED_ROWS
   FROM FINAL TABLE
   (
   INSERT INTO xxx
          (c1)
   SELECT EE.LVL
     FROM ORGAN EE
   WHERE NOT EXISTS ( SELECT *
                        FROM  xxx CCC
                       WHERE CCC.c1 = EE.LVL
                     )              
   ) E
)

SELECT *
 FROM MATCHED
    , NOT_MATCHED
;




pajama 2013-01-11 21:08:24
공유해주셔서 감사드립니다

현지수 2013-01-14 10:30:49
좋은 정보 감사합니다. 저도 65살에 좋아하는 일을 하고 있을 수 있기 위해 열심히 노력해야 할것 같습니다. ^^

김용민 2013-01-23 23:48:16
저게 되네요 ㅎㅎㅎ

배학생 2013-02-12 15:57:15
헐~ 저게 되네요... 생각도 못했는데 ㅋ



728x90

+ Recent posts