더북(TheBook)

② DECODE (expr, search1, result1, search2, result2, …, default)

DECODE는 expr과 search1을 비교해 두 값이 같으면 result1을, 같지 않으면 다시 search2와 비교해 값이 같으면 result2를 반환하고, 이런 식으로 계속 비교한 뒤 최종적으로 같은 값이 없으면 default 값을 반환한다.

입력

    SELECT prod_id,
             DECODE(channel_id, 3, 'Direct',
                                9, 'Direct',
                                5, 'Indirect',
                                4, 'Indirect',
                                   'Others')  decodes
       FROM sales
      WHERE rownum < 10;

결과

    PROD_ID   DECODES
    --------- ---------
         18    Others
         18    Indirect
         18    Indirect
         18    Indirect
         18    Indirect
         18    Indirect
         18    Indirect
         18    Indirect
         18    Others

    9개의 행이 선택됨.

앞의 쿼리는 매출 테이블에서 무작위로 9건을 추출해 channel_id가 3, 9인 건은 ‘Direct’, 4, 5인 건은 ‘Indirect’, 나머지는 ‘Others’로 보여주는 쿼리다. 눈치챘겠지만 DECODE 함수는 일반 프로그래밍 언어에 있는 IF~ELSE 문과 그 처리 방식이 같고 3장에서 배웠던 CASE와도 처리 방식이 비슷하다. 다만 DECODE 함수는 비교 값과 결과 값을 일일이 나열해야 하므로 DECODE보다는 CASE 표현식을 사용하는 것이 코드가 깔끔해진다.

지금까지 오라클에서 제공하는 대표적인 SQL 함수에 대해 알아 보았다. 필자 판단으로 자주 사용하는 함수 위주로 내용을 전개했는데, 여기서 소개한 내용 외에도 다른 SQL 함수가 많다. 추가로 알아야 할 다른 함수에 대해서는 필요할 때 소개하겠다. 이러한 함수에 대한 내용을 알고 있으면 개발자가 직접 구현할 필요 없이 가져와서 사용하기만 하면 된다. 개발자가 직접 함수를 구현하는 사용자 정의 함수에 대해서는 PL/SQL 부분에서 설명할 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.