ANSI쿼리 UPDATE문에서 JOIN 쓸 수 있나요? 0 2 1,925

by 달콤꼬야 [2017.12.29 15:42:50]


UPDATE A
SET
    A.CD_BSACTIV = {@P_CD_ATTR},
    A.ID_UPDATE = {@P_ID_UPDATE},
    A.DTS_UPDATE = {@P_DTS_UPDATE}
FROM FI_CFWS_MST A
INNER JOIN    MA_COA_MST B
    ON B.CD_COMPANY = A.CD_COMPANY
    AND BCD_GAAP = A.CD_GAAP
    AND B.CD_ACCT = A.CD_ACCT
INNER JOIN    MA_ACGRP_DTL C
    ON C.CD_COMPANY = A.CD_COMPANY
    AND CCD_GAAP = A.CD_GAAP
    AND C.CD_FSFORM = A.CD_FSFORM
    AND C.CD_ACCT = A.CD_ACCT
INNER JOIN    MA_ACGRP_MST D
    ON D.CD_COMPANY = A.CD_COMPANY
    AND D.CD_GAAP = A.CD_GAAP
    AND D.CD_FSFORM = A.CD_FSFORM
    AND D.CD_ACGRP = C.CD_ACGRP
INNER JOIN    MA_ACGRP_MST E
    ON E.CD_COMPANY = A.CD_COMPANY
    AND E.CD_GAAP = A.CD_GAAP
    AND E.CD_FSFORM = A.CD_FSFORM
    AND E.CD_ACGRP = D.CD_1LEVEL 
WHERE A.CD_COMPANY = {@P_CD_COMPANY}
    AND A.CD_GAAP = {@P_CD_GAAP}
    AND A.YM_ACPE = {@P_YM_ACPE}
    AND A.CD_FSFORM = 'D0012'
    AND A.CD_ACCT IN ({@P_ADDED_ACCT})
    AND E.CD_GRP IN ('100', '200', '300')
    AND B.NM_ACCT LIKE '%' + {@P_NM_KEY} + '%'

 

 

이렇게 짜진 쿼리인데 오라클에서 안돌아가서요ㅠㅠ

ANSI로 오라클 MSSQL 등등 다 돌아가게 짜야하는데 어떻게 수정해야될까요ㅠㅠㅠㅠㅠㅠ

by 마농 [2018.01.02 08:34:51]
-- 오라클 Update 절에는 From 절이 없습니다.
-- Exist 나 In 등의 서브쿼리를 이용해 체크하셔야 합니다.
UPDATE fi_cfws_mst a
   SET a.cd_bsactiv = :p_cd_attr
     , a.id_update  = :p_id_update
     , a.dts_update = :p_dts_update
 WHERE a.cd_company = :p_cd_company
   AND a.cd_gaap    = :p_cd_gaap
   AND a.ym_acpe    = :p_ym_acpe
   AND a.cd_fsform  = 'D0012'
   AND a.cd_acct   IN (:p_added_acct)
   AND EXISTS (SELECT 1
                 FROM ma_coa_mst b
                INNER JOIN ma_acgrp_dtl c
                   ON c.cd_company = a.cd_company
                  AND c.cd_gaap    = a.cd_gaap
                  AND c.cd_fsform  = a.cd_fsform
                  AND c.cd_acct    = a.cd_acct
                INNER JOIN ma_acgrp_mst d
                   ON d.cd_company = a.cd_company
                  AND d.cd_gaap    = a.cd_gaap
                  AND d.cd_fsform  = a.cd_fsform
                  AND d.cd_acgrp   = c.cd_acgrp
                INNER JOIN ma_acgrp_mst e
                   ON e.cd_company = a.cd_company
                  AND e.cd_gaap    = a.cd_gaap
                  AND e.cd_fsform  = a.cd_fsform
                  AND e.cd_acgrp   = d.cd_1level 
                WHERE b.cd_company = a.cd_company
                  AND b.cd_gaap    = a.cd_gaap
                  AND b.cd_acct    = a.cd_acct
                  AND b.nm_acct LIKE '%' || :p_nm_key || '%'
                  AND e.cd_grp IN ('100', '200', '300')
               )
;

 


by 달콤꼬야 [2018.01.02 13:01:40]

정말 항상 많이배웁니다. 감사합니다~!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입