Functions 는 DB에서 사전에 특정한 동작을 수행하도록 작성된 것들입니다. 예를들어 두 수의 합을 구하는 SUM 같은 것들이 대표적입니다. 그리고 이런 함수 중에서 각각의 모든 행에 대해서 함수를 적용하는 것을 Single Row Function 이라고 부릅니다. 우리가 이미 사용했던 것 중에 Concat 이 대표적인 SRFs 라고 할 수 있겠습니다. 서로 다른 2개 이상의 컬럼과 값들을 하나로 만들어 하나의 값을 각가의 행에 대해서 반환하기 때문이죠.
위와 같은 것을 예시로 들 수 있는데요. 'hello' 를 upper 로 만드는 SRF 를 실행시키면 각각의 모든 행에 대해서 upper('hello') 가 적용되어 결과가 출력됩니다. 현재 EMP 테이블에는 총 14개의 튜플이 들어있기 때문에 다음과 같은 결과가 나오는 것을 확인할 수 있습니다.
14개의 HELLO 가 출력되는 것을 볼 수 있습니다.
또한 SRF 에 대해서 한 가지 더 알아두면 좋은 것이 있는데요. 바로 위에서 보는 것과 같이, Function 들은 최소로 요구하는 사항으로 Select 와 From 을 포함하고 있습니다. 그래서 upper('hello') 만 실행시키면 오류가 발생하게 됩니다.
이런 Function 의 특징에 맞추어서 기본적으로 제공하는 테이블 Dual 의 존재이유를 알 수 있습니다. 만약 현재 내가 갖고 있는 테이블의 튜플이 1,000개라면 내가 어떤 함수의 기능을 테스트할 때마다 정보가 1,000개씩 튀어나올 겁니다. 부담스럽기 때문에 이런 연습을 편리하게 할 수 있는 Dual 테이블이 기본적으로 주어지게 됩니다. Dual 테이블은 위에서 보는 것과 같이 1개의 데이터만을 가지고 있는 모습을 하고 있습니다.
이런 Dual 테이블의 재밌는 점은 원래 기본 데이터가 위에서 보는 것과 같이 수정된다는 점인데요. X 가 들어있던 튜플의 데이터가 다른 데이터로 출력되는 것을 볼 수 있습니다.
또한 위에서 보는 것과 같이 Select 절에 주어진 데이터에 따라서 컬럼이 추가되는 것도 확인할 수 있습니다. 이처럼 dual 테이블은 여러 연습을 해볼 수 있는 편리한 '유연성'을 가지고 있습니다.
같은 역할을 수행하는 Concat( ) 함수를 지금 작성하였는데요. Concat( ) 함수는 2개의 인자를 받을 수 있기 때문에 여러 개의 문장과 단어를 연결하기 위해서는 Concat( ) 함수를 여러 번 중복해서 사용해야 합니다.