숫자 값을 K, M, G 단위로 표시하는 단위 변환 함수를 생성해보자.
아래와 같이 사용자 정의 함수를 함수를 생성하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
-- 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; / |
아래는 사용자 정의 함수를 사용한 쿼리다. 단위가 변환된 것을 확인할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-- 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 |