Oracle/PL/SQL2018. 12. 31. 11:37

숫자 값을 K, M, G 단위로 표시하는 단위 변환 함수를 생성해보자.


아래와 같이 사용자 정의 함수를 함수를 생성하자.

-- 1
CREATE OR REPLACE FUNCTION fnc_unit (
    i_val    IN    NUMBER
  , i_div    IN    NUMBER DEFAULT 1024
)
    RETURN VARCHAR2
IS
    l_val    NUMBER := i_val;
    l_idx    NUMBER := 1;
BEGIN
    CASE
        WHEN i_val IS NULL
        THEN
            RETURN NULL;
        ELSE
            LOOP
                EXIT WHEN l_val < i_div;
                l_val := l_val / i_div;
                l_idx := l_idx + 1;
            END LOOP;

            RETURN TO_CHAR (ROUND (l_val, 2), LPAD ('9', LENGTH (i_div) - 1, '9') || '0.90')
                || TRANSLATE (l_idx, '123456789', ' KMGTPEZY');
    END CASE;
END fnc_unit;
/

아래는 사용자 정의 함수를 사용한 쿼리다. 단위가 변환된 것을 확인할 수 있다.

-- 2
SELECT fnc_unit (bytes) AS bytes
     , fnc_unit (blocks, 1000) AS blocks
     , fnc_unit (initial_extent, 1000) AS initial_extent
     , fnc_unit (max_extents, 1000) AS max_extents
  FROM user_segments
 WHERE segment_name = 'EMP';

BYTES     BLOCKS    INITIAL_EXTENT MAX_EXTENTS
--------- --------- -------------- -----------
   64.00K     8.00     65.54K          2.15G

1개의 행이 선택되었습니다.


'Oracle > PL/SQL' 카테고리의 다른 글

ETL 유틸리티 패키지  (1) 2020.02.13
다형성 테이블 함수  (0) 2019.01.04
에러 메시지 조회 함수  (0) 2018.12.24
런타임 실행 계획 조회 함수  (0) 2018.12.12
RAW 변환 함수  (0) 2018.11.13
Posted by 정희락_