본문 바로가기

Workin'/Database

[Oracle] DECODE 함수

반응형

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm#i1017437 자체 번역 (이상할 수 있음)

 

1. 문법

 DECODE ( expr , { search , result , } default )

 

2. 목적

  • DECODE는 expr과 각 search 값을 하나씩 비교한다. 만약 expr과 search의 값이 같으면, Oracle 데이터베이스는 그에 해당하는 result값을 return한다.

  • 만약 매치되는 search값이 없다면, Oracle는 default값을 return한다.

  • 만약 default값이 생략되어 있다면, Oracle는 null값을 return한다.

 

  • 파라미터 값으로는 모든 숫자 타입 (NUMBER, BINARY_FLOAT, BINARY_DOUBLE) 혹은 문자열 타입을 지정할 수 있다.

    • 만약 expr과 search값이 문자열 타입이면, Oracle는 *Nonpadded comparision semantics를 사용하여 둘을 비교한다. expr, search, result는 char, varchar2, nchar, nvarchar2가 될 수 있다. string는 varchar2 데이터 타입을 리턴하게 되며, result 파라미터 타입 또한 varchar2 데이터 타입으로 지정된다.

    • 만약, 첫번째 search-result가 numeric일 경우, Oracle는 모든 search-result 표현식과 첫 번째 설명을 비교하여 가장 높은 숫자 우선 순위를 가진 인수를 결정하고, 나머지 인수를 해당 데이터 유형으로 암묵적으로 변환한 뒤 해당 데이터 유형을 반환한다.

 

  • search, result, default 값들은 표현식으로부터 파생된다. Oracle 데이터베이스는 short-circuit evaluation을 사용한다. 그 말인 즉슨, 데이터베이스는 각 search 값들을 expr와 비교하기 전에 평가하며, 모든 search 값들을 평가한 후 expr과 비교한다. 자연스럽게, Oracle는 이전 검색이 만료된 검색과 동일한 경우 검색을 평가하지 않는다.

  • Oracle는 비교하기 전에 자동으로 expr과 각 search 값을 첫 번째 search 값의 데이터 유형으로 변환한다. Oracle은 첫 번째 result값과 동일한 데이터 유형으로 반환 값을 자동으로 변환한다. 첫 번째 result에 데이터타입 CHAR이 있거나 첫 번째 결과가 NULL인 경우, 오라클은 return 값을 데이터 타입 VARCHAR2 로 변환한다.

 

  • DECODE 함수에서는, 오라클은 두 개의 NULL을 동등하다고 판단한다. 만약 expr가 null일 경우, Oracle은 첫 번째 search의 result 값 또한 null로 반환한다.

  • DECODE 함수에서  사용할 수 있는 컴포넌트(expr, searches, results, and default)의 최대 갯수는 255개이다. 

 

*Nonpadded Comparison Semantics 추가 예정

반응형