숫자 값을 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 |