승적이익강 (勝敵而益强)

금액->한글 Return용 함수 본문

Database

금액->한글 Return용 함수

그녕이 2008. 9. 19. 12:18

-- 아래는 숫자를 한글로만 Return하는 함수입니다.

-- =============================================================================

CREATE OR REPLACE FUNCTION F_Pernum(AMT VARCHAR2) RETURN VARCHAR2 IS

V_RETURN_VALUE VARCHAR2(2);

BEGIN
  IF AMT='1' THEN
   V_RETURN_VALUE := '일';
  END IF;
  IF AMT='2' THEN
   V_RETURN_VALUE := '이';
  END IF;
  IF AMT='3' THEN
   V_RETURN_VALUE := '삼';
  END IF;
  IF AMT='4' THEN
   V_RETURN_VALUE := '사';
  END IF;
  IF AMT='5' THEN
   V_RETURN_VALUE := '오';
  END IF;
  IF AMT='6' THEN
   V_RETURN_VALUE := '육';
  END IF;
  IF AMT='7' THEN
   V_RETURN_VALUE := '칠';
  END IF;
  IF AMT='8' THEN
   V_RETURN_VALUE := '팔';
  END IF;
  IF AMT='9' THEN
   V_RETURN_VALUE := '구';
  END IF;
  IF AMT='0' THEN
   V_RETURN_VALUE := '0';
  END IF;
  RETURN V_RETURN_VALUE;
END;
/

-- =============================================================================

 

2.t실제 아래함수를 호출하면 숫자를 한글로 리턴해줍니다.

-- =============================================================================

CREATE OR REPLACE FUNCTION F_Numtokor( amt NUMBER) RETURN VARCHAR2 IS

V_RETURN_VALUE VARCHAR2(100);
V_CHARAMT      VARCHAR2(16);
TYPE arr_varchar2 IS TABLE OF VARCHAR2(4) INDEX BY BINARY_INTEGER;
v_Danwi arr_varchar2;
V_TMP          VARCHAR2(10);
v_row          NUMBER;
v_cnt          NUMBER;

BEGIN
  v_Danwi(1)  := ''  ;
  v_Danwi(2)  := '십';
  v_Danwi(3)  := '백';
  v_Danwi(4)  := '천';
  v_Danwi(5)  := '만';
  v_Danwi(6)  := '십';
  v_Danwi(7)  := '백';
  v_Danwi(8)  := '천';
  v_Danwi(9)  := '억';
  v_Danwi(10) := '십';
  v_Danwi(11) := '백';
  v_Danwi(12) := '천';
  v_Danwi(13) := '조';
  v_Danwi(14) := '십';
  v_Danwi(15) := '백';
  v_Danwi(16) := '천';

     V_CHARAMT := TO_CHAR(AMT);

  IF SUBSTR(V_CHARAMT,  LENGTH(V_CHARAMT) - 7, 4) = '0000' THEN
  v_Danwi(5) := '';
  END IF;

  IF SUBSTR(V_CHARAMT, LENGTH(V_CHARAMT) - 11, 4) = '0000' THEN
   v_Danwi(9) := '';
  END IF; 
   
  FOR V_ROW IN 1..LENGTH(V_CHARAMT) LOOP
    BEGIN
      V_TMP := F_Pernum(SUBSTR(V_CHARAMT, LENGTH(V_CHARAMT) - V_ROW + 1, 1));
   IF V_TMP = '0' THEN
      IF V_ROW <> 5 AND V_ROW <> 9 THEN
         V_DANWI(V_ROW) := '';
      END IF;
      V_TMP := '';
   END IF;
            V_RETURN_VALUE := V_TMP || V_DANWI(V_ROW) || V_RETURN_VALUE;
   END;
  END LOOP;
  V_RETURN_VALUE := V_RETURN_VALUE || '원';
  RETURN V_RETURN_VALUE;
END;
/

-- =============================================================================

예)F_Numtokor(30000000)  ===> 삼천만원

 

이상 허접이었습니다...

Comments