PL/SQL Prodedure 질문 입니다.. 0 6 1,966

by 김도희 [2012.03.23 22:03:13]


질문이 또 있어서 올릴께요..

프로시져 만드는데여..

 

SELECT  LTRIM(SYS_CONNECT_BY_PATH(STRDESGNCD,'^,^'),'^,^')STRDESGNCD
               INTO v_Group2_strdesgncd
                FROM
                (SELECT STRDESGNCD, ROW_NUMBER() OVER(PARTITION BY NUM ORDER BY NUM) RN, COUNT(*) OVER (PARTITION BY NUM) CNT
                FROM
                    (SELECT STRDESGNCD , 1 num
                      FROM CHM_DESIGNATION_M
                     WHERE STRAGENTIDENTITY=22 
                    )
                )
                WHERE LEVEL = CNT
                START WITH RN =1
                CONNECT BY PRIOR CNT = CNT
                AND PRIOR RN = RN-1

                ;
DBMS_OUTPUT.PUT_LINE('v_Group1_strdesgncd:::'||v_Group1_strdesgncd||'********');

v_Group2_strdesgncd := replace(v_Group2_strdesgncd,'^','''');


***** 결과값이 AMGA','MGA','DMGA','ACGA 이렇게 나와요..

그리고 결과값이  'AMGA','MGA','DMGA','ACGA' 해도 아래 IF문을 안타드라고요..

 

v_strdesgncd 의 값은 MGA 예여..

 

 v_strdesgncd IN (v_Group2_strdesgncd) 이러면

생각으로는 MGA  IN ('AMGA','MGA','DMGA','ACGA')  이렇게 되서 IF을 타야되는데

타질 안네여..

 

 

IF v_strdesgncd IN (v_Group2_strdesgncd)
              THEN
                  UPDATE CHM_AGENT_M
                  SET 
                         strsupagentcd      = ''
                         ,strproductionlink = vsm_strpresidentcd 
                         ,strfsabranchcd    = vsm_strfsabranchcd 

                         ,strsmagtcd        = pi_SM_Code
                         ,strdocagtcd       = vsm_strpresidentcd 
                         ,striocagtcd       = ''  
                         ,dtintvwstatus     = vdt_today
                         ,dtupdated         = SYSDATE
                         ,strupdatedby      = pi_user_id
                  WHERE  lapplcseqnbr       = pi_seqno;

 

이렇게 쓰고싶은데 도통 저 IF문을 타지 안아요...

반드시 저 IF문을 태워야되는데 방법 점 알려주세요

그리고  좋은 다른 방법있으면 알려주세요...

by 비니부장 [2012.03.24 17:16:43]
IF v_strdesgncd IN (v_Group2_strdesgncd)  

IF v_Group2_strdesgncd LIKE '%' || v_strdesgncd || '%' 

이렇게 바꾸세요.

by 손님 [2012.03.24 18:05:32]

네 감사합니다.. 해볼께요..^^


by 김도희 [2012.03.24 18:06:25]

네..감사합니다....LIKE문 써서 해볼께요..

by 김도희 [2012.03.25 20:19:16]
생각해보니 LIKE문은 쓰는건 힘들꺼 같애요..
왜냐하면..다른 IF문을 쓸때 'FMGA' 나 'CMGA' 가 들어오면 다른 IF을 타는거자나요..
그러면 안되는데요..반드시 같은 값이 들어올때만 타야되는데...
다른방법점 제시해주세요....

by 비니부장 [2012.03.25 21:50:39]
SELECT STRDESGNCD , 1 num
                      FROM CHM_DESIGNATION_M
                     WHERE STRAGENTIDENTITY=22 

여기 문장에
AND LENGTH(
STRDESGNCD) = LEGNGTH(v_strdesgncd)
을 추가하세요.



by 마농 [2012.03.26 08:39:38]
SELECT COUNT(*)
  INTO v_cnt
  FROM chm_designation_m
 WHERE stragentidentity = 22
   AND strdesgncd = v_strdesgncd
;

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