SUBSTRB 관련 질문좀 드릴께요... 0 1 2,155

by 냉큼오시오~* [2008.11.19 10:20:38]


SUBSTRB(FCZ_DEPT_NM(FMM_MEMB_CODE(RTRIM(A.WORK_MEMB))),1,30)

여기서 FCZ_DEPT_NM, FMM_MEMB_CODE 는 함수로 구성되어 있습니다..

이 2개의 함수를 select 로 풀어야 하는데 잘 안되네요..

FCZ_DEPT_NM 은

CREATE OR REPLACE FUNCTION FCZ_DEPT_NM (
  I_DEPT      VARCHAR2           -- 부서코드(4), .지점코드(3)
, I_NM_TP     VARCHAR2 := 'A'    -- 'F'ull/'A'bbr/'E'ng
) RETURN VARCHAR2 AS
BEGIN

  IF    LENGTHB(I_DEPT) = 3 THEN  -- 지점코드
    FOR C1 IN (
      SELECT DEPT_ABBR, DEPT_NM, ENG_NM
        FROM CZS.CZ202M00 A  -- 지점
       WHERE DEPT_CODE = I_DEPT
    ) LOOP
      IF    I_NM_TP = 'F' THEN   -- FULL NAME
        RETURN C1.DEPT_NM;
      ELSIF I_NM_TP = 'E' THEN   -- 영문명
        RETURN C1.ENG_NM;
      ELSE                       -- 약어
        RETURN C1.DEPT_ABBR;
      END IF;
    END LOOP;
  ELSIF LENGTHB(I_DEPT) = 4 THEN  -- 부서코드
    FOR C1 IN (
      SELECT DEPT_ABBR, DEPT_NM, ENG_NM
        FROM CZS.CZ203M00 A  -- 부서
       WHERE SECT_CODE = I_DEPT
    ) LOOP
      IF    I_NM_TP = 'F' THEN   -- FULL NAME
        RETURN C1.DEPT_NM;
      ELSIF I_NM_TP = 'E' THEN   -- 영문명
        RETURN C1.ENG_NM;
      ELSE                       -- 약어
        RETURN C1.DEPT_ABBR;
      END IF;
    END LOOP;

    FOR C1 IN (
      SELECT DEPT_ABBR, DEPT_NM, ENG_NM
        FROM EAS.EA021M00 A  -- 약정부점
       WHERE SECT_CODE = I_DEPT
    ) LOOP
      IF    I_NM_TP = 'F' THEN   -- FULL NAME
        RETURN C1.DEPT_NM;
      ELSIF I_NM_TP = 'E' THEN   -- 영문명
        RETURN C1.ENG_NM;
      ELSE                       -- 약어
        RETURN C1.DEPT_ABBR;
      END IF;
    END LOOP;
  END IF;
  RETURN '';
END FCZ_DEPT_NM;
/

FMM_MEMB_CODE  는

CREATE OR REPLACE FUNCTION FMM_MEMB_CODE
      ( I_MEMB    IN  VARCHAR2 )               -- 사원번호

RETURN VARCHAR2 AS
BEGIN
    IF SUBSTR(I_MEMB,1,1) = 'A' THEN -- 공통관리자
       RETURN SUBSTR(I_MEMB,4,3);
    ELSE
       FOR C1 IN (SELECT SECT_CODE FROM MMS.MM401M00 -- 인사MASTER
                WHERE MEMB = I_MEMB)
       LOOP
         RETURN NVL(C1.SECT_CODE,'9999');
       END LOOP;
         RETURN '9999';
    END IF;
END FMM_MEMB_CODE;
/

 

이렇게 구성되어 있는데 어떻게 풀어서 써야 하는지 좀 알려주세요 ㅠㅠ

 

by 마농 [2008.11.19 11:22:59]
SELECT aaa.work_memb
, aaa.dept
, aaa.dept_nm
, SUBSTRB(aaa.dept_nm,1,30) dept_name
FROM
(
SELECT aa.work_memb
, aa.dept
, DECODE(LENGTH(aa.dept)
,3,(SELECT dept_abbr FROM czs.cz202m00 WHERE dept_code = aa.dept)
,4,(SELECT dept_abbr FROM czs.cz203m00 WHERE sect_code = aa.dept)
,(SELECT dept_abbr FROM eas.ea021m00 WHERE sect_code = aa.dept)
) dept_nm
FROM
(
SELECT a.work_memb
, DECODE(SUBSTR(a.work_memb,1,1),'A',SUBSTR(a.work_memb,4,3)
, (SELECT NVL(sect_code,'9999') dept FROM mms.mm401m00 WHERE memb = a.work_memb)
) dept
FROM a
) aa
) aaa
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입