제4장 함수

내용 목차

4.1. 개요
4.1.1. 단일 로우 함수
4.1.2. 집단 함수
4.1.3. 분석 함수
4.2. 함수 목록
4.2.1. ABS
4.2.2. ACOS
4.2.3. ADD_MONTHS
4.2.4. AGGR_CONCAT
4.2.5. APPENDCHILDXML
4.2.6. ASCII
4.2.7. ASCIISTR
4.2.8. ASIN
4.2.9. ATAN
4.2.10. ATAN2
4.2.11. AVG
4.2.12. BIN_TO_NUM
4.2.13. BITAND
4.2.14. CAST
4.2.15. CEIL
4.2.16. CHARTOROWID
4.2.17. CHR
4.2.18. COALESCE
4.2.19. COMPOSE
4.2.20. CONCAT
4.2.21. CONVERT
4.2.22. CORR
4.2.23. COS
4.2.24. COSH
4.2.25. COUNT
4.2.26. COVAR_POP
4.2.27. COVAR_SAMP
4.2.28. CUME_DIST
4.2.29. CURRENT_DATE
4.2.30. CURRENT_TIME
4.2.31. CURRENT_TIMESTAMP
4.2.32. DBTIMEZONE
4.2.33. DECODE
4.2.34. DECOMPOSE
4.2.35. DELETEXML
4.2.36. DENSE_RANK
4.2.37. DUMP
4.2.38. EMPTY_BLOB
4.2.39. EMPTY_CLOB
4.2.40. EXISTSNODE
4.2.41. EXP
4.2.42. EXTRACT
4.2.43. EXTRACT(XML)
4.2.44. EXTRACTVALUE
4.2.45. FIRST
4.2.46. FIRST_VALUE
4.2.47. FLOOR
4.2.48. FROM_TZ
4.2.49. GETBLOBVAL
4.2.50. GETCLOBVAL
4.2.51. GETROOTELEMENT
4.2.52. GETSTRINGVAL
4.2.53. GREATEST
4.2.54. GROUPING
4.2.55. GROUPING_ID
4.2.56. GROUP_ID
4.2.57. HEXTORAW
4.2.58. INET_ATON
4.2.59. INET_NTOA
4.2.60. INITCAP
4.2.61. INSERTCHILDXML
4.2.62. INSERTCHILDXMLAFTER
4.2.63. INSERTCHILDXMLBEFORE
4.2.64. INSERTXMLAFTER
4.2.65. INSERTXMLBEFORE
4.2.66. INSTR
4.2.67. ISFRAGMENT
4.2.68. KURT
4.2.69. LAG
4.2.70. LAST_DAY
4.2.71. LAST
4.2.72. LAST_VALUE
4.2.73. LEAD
4.2.74. LEAST
4.2.75. LENGTH
4.2.76. LISTAGG
4.2.77. LN
4.2.78. LNNVL
4.2.79. LOCALTIMESTAMP
4.2.80. LOG
4.2.81. LOWER
4.2.82. LPAD
4.2.83. LTRIM
4.2.84. MAX
4.2.85. MEDIAN
4.2.86. MIN
4.2.87. MOD
4.2.88. MONTHS_BETWEEN
4.2.89. NANVL
4.2.90. NEW_TIME
4.2.91. NEXT_DAY
4.2.92. NLSSORT
4.2.93. NLS_CHARSET_ID
4.2.94. NLS_INITCAP
4.2.95. NLS_LOWER
4.2.96. NLS_UPPER
4.2.97. NTILE
4.2.98. NULLIF
4.2.99. NUMTODSINTERVAL
4.2.100. NUMTOYMINTERVAL
4.2.101. NVL
4.2.102. NVL2
4.2.103. ORA_HASH
4.2.104. OVERLAPS
4.2.105. PERCENT_RANK
4.2.106. PERCENTILE_CONT
4.2.107. PERCENTILE_DISC
4.2.108. POWER
4.2.109. QOUTED_STRING
4.2.110. RANK
4.2.111. REGR_SLOPE
4.2.112. REGR_INTERCEPT
4.2.113. REGR_COUNT
4.2.114. REGR_R2
4.2.115. REGR_AVGX
4.2.116. REGR_AVGY
4.2.117. REGR_SXX
4.2.118. REGR_SYY
4.2.119. REGR_SXY
4.2.120. RATIO_TO_REPORT
4.2.121. RAWTOHEX
4.2.122. REGEXP_COUNT
4.2.123. REGEXP_INSTR
4.2.124. REGEXP_REPLACE
4.2.125. REGEXP_SUBSTR
4.2.126. REMAINDER
4.2.127. REPLACE
4.2.128. REVERSE
4.2.129. ROUND(number)
4.2.130. ROUND(date)
4.2.131. ROWIDTOCHAR
4.2.132. ROW_NUMBER
4.2.133. RPAD
4.2.134. RTRIM
4.2.135. SESSIONTIMEZONE
4.2.136. SIGN
4.2.137. SIN
4.2.138. SINH
4.2.139. SKEW
4.2.140. SQRT
4.2.141. STATS_MODE
4.2.142. STDDEV
4.2.143. STDDEV_POP
4.2.144. STDDEV_SAMP
4.2.145. SUBSTR
4.2.146. SUM
4.2.147. SYS_CONNECT_BY_PATH
4.2.148. SYS_CONTEXT
4.2.149. SYS_EXTRACT_UTC
4.2.150. SYS_GUID
4.2.151. SYSDATE
4.2.152. SYSTIME
4.2.153. SYSTIMESTAMP
4.2.154. TAN
4.2.155. TANH
4.2.156. TIMESTAMP_TO_TSN
4.2.157. TO_BINARY_DOUBLE
4.2.158. TO_BINARY_FLOAT
4.2.159. TO_BLOB
4.2.160. TO_CHAR(character)
4.2.161. TO_CHAR(datetime)
4.2.162. TO_CHAR(number)
4.2.163. TO_CLOB
4.2.164. TO_DATE
4.2.165. TO_DSINTERVAL
4.2.166. TO_LOB
4.2.167. TO_MULTI_BYTE
4.2.168. TO_NCHAR(character)
4.2.169. TO_NCHAR(datetime)
4.2.170. TO_NCHAR(number)
4.2.171. TO_NCLOB
4.2.172. TO_NUMBER
4.2.173. TO_SINGLE_BYTE
4.2.174. TO_TIME
4.2.175. TO_TIMESTAMP
4.2.176. TO_TIMESTAMP_TZ
4.2.177. TO_YMINTERVAL
4.2.178. TRANSLATE
4.2.179. TRIM
4.2.180. TRUNC(number)
4.2.181. TRUNC(date)
4.2.182. TSN_TO_TIMESTAMP
4.2.183. TZ_OFFSET
4.2.184. TZ_SHIFT
4.2.185. UID
4.2.186. UNISTR
4.2.187. UPDATEXML
4.2.188. UPPER
4.2.189. USER
4.2.190. USERENV
4.2.191. VAR_POP
4.2.192. VAR_SAMP
4.2.193. VARIANCE
4.2.194. VSIZE
4.2.195. XMLAGG
4.2.196. XMLCAST
4.2.197. XMLCDATA
4.2.198. XMLCOLATTVAL
4.2.199. XMLCOMMENT
4.2.200. XMLCONCAT
4.2.201. XMLELEMENT
4.2.202. XMLEXISTS
4.2.203. XMLFOREST
4.2.204. XMLPARSE
4.2.205. XMLPI
4.2.206. XMLQUERY
4.2.207. XMLROOT
4.2.208. XMLSERIALIZE
4.2.209. XMLSEQUENCE
4.2.210. XMLTABLE
4.2.211. XMLTRANSFORM

본 장에서는 Tibero에서 제공하는 내장 함수에 대해 기술한다.

Tibero에서는 다양한 내장 함수를 제공하고 있다. 이러한 함수 중의 일부는 SQL 표준에 정의되어 있으며, 일부는 Tibero에서 추가적으로 제공하는 것이다. Tibero의 함수는 크게 단일 로우 함수와 집단 함수로 구분할 수 있다.

일부 함수는 파라미터가 없는 것도 있지만, 대부분의 함수는 하나 이상의 파라미터를 입력으로 받는다. 또한 모든 함수는 하나의 출력 값을 반환한다. 각 파라미터는 데이터 타입이 정해져 있다. 정해진 데이터 타입 이외의 다른 타입의 값이 입력된 경우에는 “3.3.1. 연산식의 변환”에서 설명한 대로 데이터 타입의 변환을 시도한다. 데이터 타입의 변환이 불가능한 경우에는 에러를 반환한다. 또한, 범위를 넘는 값을 컬럼에 저장할 때에도 에러를 반환한다.

대부분의 함수는 파라미터 값으로 NULL이 입력된 경우 NULL을 반환한다. NULL이 입력된 경우에도 NULL을 반환하지 않는 함수로는 CONCAT, NVL, REPLACE 등이 있다.

함수의 반환값을 컬럼에 저장할 때에는 반환값의 범위에 유의해야 한다.

  • 함수의 반환값이 NUMBER 타입인 경우 컬럼의 정밀도와 스케일 범위 내의 값이어야 한다.

  • 함수의 반환값이 CHAR 타입인 경우 컬럼의 최대 길이 범위 내의 값이어야 한다.

  • 함수의 반환값이 VARCHAR 타입인 경우 컬럼의 최대 길이 범위 내의 값이어야 한다.

집단 함수는 하나 이상의 로우로부터 컬럼 값을 파라미터로 입력받는 함수이다. 함수의 파라미터는 반드시 컬럼 값만 입력받는 것은 아니고 실제 데이터를 직접 입력으로 받을 수도 있다. 집단 함수는 SELECT 문의 SELECT 절, GROUP BY 절, HAVING 절에만 포함된다.

Tibero에서 제공하는 집단 함수에는 AVG, COUNT, MAX, MIN, SUM 등이 있다. 이러한 함수는 각각 파라미터로 주어진 컬럼에 대하여 평균, 개수, 최댓값, 최솟값, 합계 등을 구한다. 만약 파라미터로 실제 데이터 값이 주어지면 그 값을 그대로 반환한다.

SELECT 절

SELECT 문에서 SELECT 절의 집단 함수는 중첩될 수 있다. 단, 다른 위치의 집단 함수는 중첩되면 안 된다. 또한, SELECT 절의 집단 함수도 한 번의 중첩만을 허용한다.

따라서, 다음과 같은 집단 함수는 에러를 반환한다.

COUNT(SUM(AVG(SALARY)))

중첩된 집단 함수의 계산은 먼저 각 그룹에 대한 안쪽의 집단 함수를 계산하고, 여기에서 반환된 모든 값에 대하여 바깥쪽의 집단 함수를 계산한다. 예를 들어 SUM(AVG(SALARY)) 함수는 모든 그룹으로부터 SALARY 컬럼 값의 평균을 구하고, 그다음 모든 평균값의 합계를 구하여 반환한다.

집단 함수의 괄호 내에는 조건식이 아닌 임의의 연산식이 올 수 있다. SELECT 문에서 SELECT 절의 집단 함수는 다른 집단 함수를 포함하는 연산식이 올 수도 있다.

따라서, 다음과 같은 집단 함수도 유효하다.

SUM(AVG(SALARY) * COUNT(EMPNO) + 1.10)

COUNT 함수는 괄호 안에 애스터리스크(*)가 올 수도 있다. 이 경우 특정 컬럼이 아닌 전체 로우의 개수를 반환한다.

로우를 하나도 포함하지 않는 빈 테이블에 대해 집단 함수를 포함하는 SELECT 문을 실행하면, 결과 로우가 하나도 반환되지 않는다. 예외적으로, SELECT 절에 COUNT(*) 함수를 포함하면 0 값의 컬럼을 갖는 하나의 로우가 반환된다.

GROUP BY 절

집단 함수는 대개 SELECT 문 내에서 GROUP BY 절과 함께 사용한다. 집단 함수는 GROUP BY 절에 의하여 분리된 각 그룹에 포함된 모든 로우에 대하여 하나의 값을 반환한다. 만약 SELECT 문에서 GROUP BY 절을 포함하지 않으면, 전체 테이블을 하나의 그룹으로 인식한다.

다음의 SELECT 문은 GROUP BY 절을 포함한 예이다.

SELECT AVG(SALARY) FROM EMP
GROUP BY DEPTNO;

위의 문장은 테이블 EMP 내의 모든 로우 중에서 같은 DEPTNO 컬럼 값을 갖는 로우의 그룹으로 분리하고, 각 그룹에 포함된 모든 직원의 SALARY 컬럼 값의 평균을 계산한다.

HAVING 절

SELECT 문에서 HAVING 절은 그룹에 대한 조건식을 포함한다. HAVING 절은 SELECT 절이나 GROUP BY 절에 포함된 컬럼 또는 그 이외의 컬럼에 대한 집단 함수를 포함할 수 있다.

다음의 SELECT 문은 HAVING 절을 포함한 예이다. 본 예제에서는 3명 이상의 직원이 소속된 부서에 대해서만 SALARY 컬럼 값의 평균을 계산한다.

SELECT AVG(SALARY) FROM EMP
GROUP BY DEPTNO
HAVING COUNT(EMPNO) >= 3;

집단 함수의 파라미터 앞에는 DISTINCT 또는 ALL 예약어를 포함시킬 수 있다. 이러한 예약어는 중복되는 컬럼 값에 대한 처리를 정의하며, DISTINCT는 중복을 제거하고, ALL은 중복을 허용한다.

예를 들어 한 그룹 내의 로우가 갖고 있는 SALARY 컬럼 값이 20000, 20000, 20000, 40000이라면, AVG(DISTINCT SALARY) 함수의 결과는 30000이며, AVG(ALL SALARY) 함수의 결과는 25000이다. 만약 아무 것도 지정하지 않으면 디폴트는 ALL이다.

다음의 표는 Tibero에서 제공하는 집단 함수 목록이다.

집단 함수설명
AVG그룹 내의 모든 로우에 대한 expr 값의 평균을 구하는 함수이다.
CORR파라미터로 주어진 expr1가 expr2의 상관계수를 계산하는 함수이다.
COUNT쿼리가 반환하는 로우의 개수를 세는 함수이다.
COVAR_POPexpr1, expr2의 모공분산을 계산하는 함수이다.
COVAR_SAMPexpr1, expr2의 표본공분산을 계산하는 함수이다.
DENSE_RANK각 그룹별로 로우를 정렬한 다음 그룹 내의 각 로우에 대한 순위를 반환하는 함수이다.
FIRST정렬된 로우에서 처음에 해당하는 로우를 뽑아내어 명시된 집단함수를 적용한 결과를 반환한다.
LAST정렬된 로우에서 마지막에 해당하는 로우를 뽑아내어 명시된 집단함수를 적용한 결과를 반환한 다.
MAX그룹 내의 모든 로우에 대한 expr 값 중의 최댓값을 구하는 함수이다.
MIN그룹 내의 모든 로우에 대한 expr 값 중의 최솟값을 구하는 함수이다.
PERCENT_RANK파라미터로 주어진 값의 그룹 내의 위치를 나타내 주는 함수이다.
PERCENTILE_CONT연속 분포 모델에서 파라미터로 주어진 백분위 값에 해당하는 값을 계산하는 역 분포 함수이다.
PERCENTILE_DISC이산 분포를 가정한 역분산 함수로 분석 함수로도 사용할 수 있다.
RANK그룹별로 로우를 정렬한 후 그룹 내의 각 로우의 순위를 반환하는 함수이다.

REGR_SLOPE

REGR_INTERCEPT

REGR_COUNT

REGR_R2

REGR_AVGX

REGR_AVGY

REGR_SXX

REGR_SYY

REGR_SXY

임의의 수치 데이터 쌍의 집합에 가장 맞는 선형 방정식을 구하기 위해 사용된다.
STATS_MODEexpr의 최빈값을 반환하는 함수이다.
STDDEVexpr의 표본 표준편차를 반환하는 함수이다.
STDDEV_POPexpr의 모표준편차를 반환하는 함수이다.
STDDEV_SAMPexpr의 누적 표본 표준편차를 반환하는 함수이다.
SUM그룹 내의 모든 로우에 대한 expr 값의 합계를 구하는 함수이다.
VARIANCEexpr의 분산을 반환한다.
VAR_POPexpr의 모분산을 반환한다.
VAR_SAMPexpr의 표본분산을 반환하는 함수이다.
XMLAGGXML 조각을 받고, 이를 한데 모아 XML 문서로 만들어 반환하는 함수이다.

분석 함수는 집단 함수와 마찬가지로 특정 로우 그룹에 대한 집계 값을 구하는 데 사용된다.

집단 함수와 다른 점은 하나의 로우 그룹에 속한 모든 로우가 하나의 집계 값을 공유하지 않는다는 것이다. 각각의 로우에 대해 로우 그룹이 별개로 정의되며, 때문에 모든 로우가 별개로 각각 자신의 로우 그룹에 대한 집계 값을 갖게 된다. 이 로우 그룹을 분석 함수에서는 윈도우라고 부르며, analytic_clause 안에 정의된다. 윈도우 영역은 물리적인 로우의 개수로 정의될 수도 있고, 논리적인 어떤 계산 값을 통해서 정의될 수도 있다.

하나의 쿼리 블록 안에서 분석 함수는 ORDER BY 절을 제외하고 가장 마지막에 수행되는 연산이다. WHERE 절, GROUP BY 절, HAVING 절 모두 분석 함수가 수행되기 전에 먼저 적용된다. 그러므로 분석 함수는 SELECT 절 또는 ORDER BY 절에만 나올 수 있다.

analytic_function

분석 함수는 크게 analytic_function, argument, analytic_clause로 구성된다.

analytic_function의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    analytic_function분석 함수의 이름을 명시한다.
    argument분석 함수의 파라미터를 명시한다. 함수에 따라 파라미터의 타입이 결정된다.
    OVER analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다.

analytic_clause

OVER analytic_clause를 사용하여 함수를 분석 함수로 수행할 수 있다. 분석 함수는 ORDER BY 절을 제외한 다른 모든 절의 내용이 처리된 다음에 적용된다. 그러므로 분석 함수가 계산한 결과의 일부만 선택하고자 하면, 분석 함수를 수행한 쿼리를 뷰로 둘러싸고, 그 쿼리를 둘러싼 뷰에 WHERE 절을 적용하면 된다. analytic_clause 안에 분석 함수를 사용할 수는 없다. 그러나 부질의 내에 분석 함수를 사용하는 것은 가능하다.

analytic_clause의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    partition_by분석 함수를 계산하기 전에 현재 질의 블록의 결과 집합을 분할한다.
    order_by_clausepartition_by에 의해 분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다.
    window_clausewindow_clause를 가질 수 있는 경우가 있다. 분석 함수의 order_by_clause를 명시할 경우에만 이 window_clause를 명시할 수 있다.

partition_by

분석 함수를 계산하기 전에 현재 질의 블록의 결과 집합을 expr 또는 expr의 리스트를 기준으로 분할한다. 이 절을 명시하지 않으면, 분석 함수의 윈도우는 전체 로우 집합 내에서 움직이게 된다.

하나의 질의 블록의 SELECT 절 또는 ORDER BY 절에 여러 개의 분석 함수를 명시할 수 있으며, 각각이 서로 다른 PARTITION BY 키를 갖는 것도 가능하다.

partition_by의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    exprexpr이 취할 수 있는 값은 상수, 컬럼, 분석 함수가 아닌 함수로 구성된 연산식이다.

order_by_clause

partition_by에 의해 분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다. 정렬에 사용되는 키 값은 여러 개를 명시할 수 있다.

분석 함수에서 사용되는 order_by_clause 내에서는 위치 상수(ORDER BY 1과 같은)를 사용할 수 없다. SIBLINGS 역시 사용할 수 없다. SELECT 리스트 컬럼의 별칭도 사용할 수 없다. 그 이외에는 보통의 ORDER BY 절과 사용 방식이 같다.

분석 함수에 사용된 order_by_clause는 파티션 내의 로우의 순서를 결정할 뿐이지 분석 함수를 적용하고 난 쿼리 블록의 최종 결과 집합의 로우의 순서를 결정해 주는 것은 아니다. 이를 위해서는 쿼리 블록을 위한 별도의 ORDER BY 절을 추가로 명시해야만 한다.

order_by_clause의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    SIBLINGSorder_by_clause는 계층 질의의 형제 노드 내에서 정렬 순서를 정의한다. 분석 함수에서는 사용할 수 없다.
    expr정렬의 키로 사용되는 연산식이다.
    positionselect_list에 명시된 expr의 위치를 지정한다. 분석 함수에서는 사용할 수 없다.
    ASC디폴트로, 정렬 순서를 명시한다. ASC는 오름차순으로 정렬한다.
    DESC정렬 순서를 명시한다. DESC는 내림차순으로 정렬한다.
    NULLS FIRSTNULL 값의 정렬 순서를 명시한다. NULLS FIRST는 오름차순 정렬의 디폴트로 사용된다.
    NULLS LASTNULL 값의 정렬 순서를 명시한다. NULLS LAST는 내림차순 정렬의 디폴트로 사용된다.

window_clause

분석 함수에 따라 window_clause를 가질 수 있는 경우가 있다. 분석 함수의 order_by_clause를 명시할 경우에만 window_clause를 명시할 수 있다. window_clause를 명시하지 않았을 때는 필요한 경우에 디폴트 윈도우로 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW가 지정된다.

window_clause의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명

    ROWS

    윈도우 타입을 ROW로 지정한다. 분석 함수는 현재 로우가 정의하는 윈도우 내의 로우에 대해서 계산이 된다. ROWS는 윈도우를 물리적인 로우 단위로 정의한다.

    RANGE와는 달리 ROW로 지정된 윈도우의 로우는 order_by_clause를 통해 동률이 나왔을 경우 상이한 로우가 결과로 반환된다.

    RANGE

    윈도우 타입을 RANGE로 지정한다. RANGE는 현재 로우를 기준으로 논리적인 오프셋을 명시하여 윈도우를 정의한다.

    ROW와는 달리 RANGE로 지정된 윈도우의 로우는 언제나 항상 똑같은 로우가 반환된다.

    RANGE를 명시할 경우는 order_by_clause에 하나의 키만 명시할 수 있다. RANGE로 정의된 윈도우의 경우 두 개의 로우가 order_by_clause로 인해 정렬한 결과가 동률일 때는 분석 함수의 결과 값은 항상 동일하다. “4.2.146. SUM”의 분석 함수 예제에서 이를 확인해 볼 수 있다.

    BETWEEN ... AND

    윈도우의 시작점과 끝점을 명시한다. AND 이전에 오는 것이 시작점, AND 이후에 오는 것이 끝점이다.

    BETWEEN ... AND를 명시하지 않고 하나의 시점만 명시할 경우에는, 그 시점이 시작점이 되며 끝점은 현재 로우가 된다.

다음의 표는 Tibero에서 제공하는 분석 함수와 함수별 window_clause의 명시 가능 여부를 나타낸다.

분석 함수window_clause 명시 가능 여부
AVG
CORR
COUNT
COVAR_POP
COVAR_SAMP
DENSE_RANK아니오
FIRST아니오
FIRST_VALUE
LAG아니오
LAST아니오
LAST_VALUE
LEAD아니오
MAX
MIN
NTILE아니오
PERCENT_RANK아니오
PERCENTILE_CONT아니오
PERCENTILE_DISC아니오
RANK아니오
RATIO_TO_REPORT아니오

REGR_SLOPE

REGR_INTERCEPT

REGR_COUNT

REGR_R2

REGR_AVGX

REGR_AVGY

REGR_SXX

REGR_SYY

REGR_SXY

ROW_NUMBER아니오
STDDEV
STDDEV_POP
STDDEV_SAMP
SUM
VARIANCE
VAR_POP
VAR_SAMP

window_value

window_value의 세부 내용은 다음과 같다.

본 절에서는 Tibero에서 제공하는 내장 함수에 대해 설명한다.

AVG는 그룹 내의 모든 로우에 대한 expr 값의 평균을 구하는 함수이다.

AVG의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
    exprexpr은 임의의 연산식이며, “3.3. 연산식”에서 이미 정의하였다.
    ALLALL은 기본값이다. expr 값 중에서 중복되는 값을 제거하지 않고, 모든 값의 평균을 구한다.
    DISTINCT

    expr 앞에 DISTINCT 예약어를 포함시키면, 평균을 구하기 전에 expr 값 중에서 중복되는 값을 제거한다.

    DISTINCT를 명시할 경우는 analytic_clause에서 query_partion_clause만 명시할 수 있다. order_by_clause는 명시할 수 없다.

    order_by_clause를 명시할 수 없으므로 window_clause 또한 명시할 수 없다.

    UNIQUEUNIQUE는 DISTINCT와 동일하다.
  • 예제

    다음은 AVG 함수를 사용하는 예이다.

    SQL> SELECT AVG(SALARY) AVG FROM EMP GROUP BY DEPTNO;
    
           AVG
    ----------
          3255
    
    1 row selected.
  • 분석 함수 예제

    다음은 AVG 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT ID, HIREDATE, SALARY, AVG(SALARY) OVER 
           (ORDER BY HIREDATE ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) 
           AS AAVG 
         FROM EMP;
    
            ID HIREDATE       SALARY       AAVG
    ---------- ---------- ---------- ----------
             1 1987/01/06      20000      17500
             5 1991/05/16      15000 14333.3333
             4 1999/11/25       8000 9333.33333
             2 2001/06/07       5000 6333.33333
             8 2003/03/26       6000 6666.66667
             6 2003/08/15       9000 6333.33333
             7 2004/02/08       4000 6666.66667
             3 2005/09/23       7000       5500
    
    8 rows selected.

CORR은 파라미터로 주어진 expr1가 expr2의 상관계수를 계산하는 함수이다. 분석 함수로도 사용할 수 있다. 이 함수는 모든 수치 데이터 타입과 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 파라미터로 받아 들인다. 입력된 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다.

Tibero에서는 다음의 공식을 사용해 상관계수를 계산한다.

COVAR_POP(expr1, expr2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2))

CORR의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr1, expr2expr1과 expr2는 수치 데이터 타입의 값을 반환하는 임의의 연산식이다.
    OVER analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 CORR 함수를 사용하는 예이다.

    SQL> SELECT CORR(AGE, SAL) FROM EMP;
    
    CORR(AGE,SAL)
    -------------
    -.21144410174
    
    1 row selected.
  • 분석 함수 예제

    다음은 CORR 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, CORR(SAL, AGE) 
           OVER (PARTITION BY DEPTNO) AS CORR
         FROM EMP;
    
        DEPTNO      EMPNO       CORR
    ---------- ---------- ----------
            10       7934 -.93645032
            10       7839 -.93645032
            10       7782 -.93645032
            20       7566 .567780056
            20       7788 .567780056
            20       7876 .567780056
            20       7902 .567780056
            20       7369 .567780056
            30       7654 -.33417865
            30       7698 -.33417865
            30       7521 -.33417865
            30       7499 -.33417865
            30       7844 -.33417865
            30       7900 -.33417865
    
    14 rows selected.

COUNT는 쿼리가 반환하는 로우의 개수를 세는 함수이다. 분석 함수로도 사용할 수 있다. COUNT 함수는 항상 숫자를 반환하고 NULL을 반환하는 경우는 없다.

COUNT의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    set_quantifier

    질의 결과에 중복된 로우의 허용, 비허용 여부를 지정한다.

    DISTINCT, UNIQUE, ALL을 지정할 수 있다.

    • DISTINCT, UNIQUE : 중복된 로우를 제거한다.

    • ALL : 모든 로우를 선택한다. (기본값)

    *애스터리스크(*)를 명시하면 중복된 로우와 그리고 NULL 값을 포함한 모든 로우를 개수에 포함시킨다.
    exprexpr을 명시할 경우는, COUNT 함수는 expr의 값이 NULL이 아닐 경우에만 로우를 개수에 포함시킨다. DISTINCT를 명시함으로써 expr의 값을 구했을 때 중복을 제거한 로우만 셀 수 있다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 COUNT 함수를 사용하는 예이다.

    SQL> SELECT COUNT (*) FROM EMP;
    
      COUNT(*)
    ----------
             9
    
    1 row selected.
  • 분석 함수 예제

    다음은 COUNT 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT NAME, SALARY, COUNT(*) OVER (ORDER BY SALARY RANGE 
           BETWEEN 1000 PRECEDING AND 1000 FOLLOWING) AS W_COUNT
         FROM EMP;
    
    NAME                     SALARY    W_COUNT
    -------------------- ---------- ----------
    Paul                       2000          4
    Tom                        2500          5
    Jill                       3000          6
    Susan                      3000          6
    Matt                       3200          5
    Coon                       4000          5
    Josh                       4500          2
    Cathy                      6000          2
    Brad                       6200          2
    
    9 rows selected.

COVAR_POP는 expr1, expr2의 모공분산을 계산하는 함수이다. 분석 함수로도 사용할 수 있다.

이 함수는 모든 수치 데이터 타입과 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 파라미터로 받아 들인다. NUMBER 타입을 반환한다.

Tibero에서는 다음의 공식을 사용해 모공분산을 계산한다.

(SUM(expr1 * expr2) - SUM(expr2) * SUM(expr1) / n) / n

여기서 n은 expr1과 expr2 둘 모두가 NULL이 아닌 로우의 개수이다.

COVAR_POP의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr1, expr2expr1과 expr2는 수치 데이터 타입의 값을 반환하는 임의의 연산식이다.
    OVER analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 COVAR_POP 함수를 사용하는 예이다.

    SQL> SELECT COVAR_POP(AGE, SAL) AS COVAR_POP FROM EMP;
    
     COVAR_POP
    ----------
    -642.09184
    
    1 row selected.
  • 분석 함수 예제

    다음은 COVAR_POP 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, COVAR_POP(AGE, SAL)
           OVER (PARTITION BY DEPTNO) AS COVAR_POP
         FROM EMP;
    
        DEPTNO      EMPNO  COVAR_POP
    ---------- ---------- ----------
            10       7934 -4777.7778
            10       7839 -4777.7778
            10       7782 -4777.7778
            20       7566       1470
            20       7788       1470
            20       7876       1470
            20       7902       1470
            20       7369       1470
            30       7654 -480.55556
            30       7698 -480.55556
            30       7521 -480.55556
            30       7499 -480.55556
            30       7844 -480.55556
            30       7900 -480.55556
    
    14 rows selected.

COVAR_SAMP는 expr1, expr2의 표본공분산을 계산하는 함수이다. 분석 함수로도 사용할 수 있다.

이 함수는 모든 수치 데이터 타입과 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 파라미터로 받아 들인다. NUMBER 타입을 반환한다.

Tibero에서는 다음의 공식을 사용해 표본공분산을 계산한다.

(SUM(expr1 * expr2) - SUM(expr1) * SUM(expr2) / n) / (n-1)

여기서 n은 expr1, expr2 모두 NULL이 아닌 로우의 개수이다.

COVAR_SAMP의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr1, expr2expr1과 expr2는 수치 데이터 타입의 값을 반환하는 임의의 연산식이다.
    OVER analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 COVAR_SAMP 함수를 사용하는 예이다.

    SQL> SELECT COVAR_SAMP(AGE, SAL) AS COVAR_SAMP FROM EMP;
    
    COVAR_SAMP
    ----------
    -691.48352
    
    1 row selected.
  • 분석 함수 예제

    다음은 COVAR_SAMP 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, COVAR_SAMP(AGE, SAL)
           OVER (PARTITION BY DEPTNO) AS COVAR_SAMP
         FROM EMP;
    
        DEPTNO      EMPNO COVAR_SAMP
    ---------- ---------- ----------
            10       7934 -7166.6667
            10       7839 -7166.6667
            10       7782 -7166.6667
            20       7566     1837.5
            20       7788     1837.5
            20       7876     1837.5
            20       7902     1837.5
            20       7369     1837.5
            30       7654 -576.66667
            30       7698 -576.66667
            30       7521 -576.66667
            30       7499 -576.66667
            30       7844 -576.66667
            30       7900 -576.66667
    
    14 rows selected.

DENSE_RANK는 각 그룹별로 로우를 정렬한 다음 그룹 내의 각 로우에 대한 순위를 반환하는 함수이다. 분석 함수로도 사용할 수 있다.

반환된 순위는 다음과 같은 특징이 있다.

  • 데이터 타입은 NUMBER이다.

  • 1부터 시작하는 연속적인 정수 값이다.

  • 최댓값은 중복되는 값을 하나로 계산했을 때 전체 로우의 개수가 된다.

  • 중복된 값이 나타났을 때 다음 순위의 값은 건너뛰지 않고 1이 증가한 값이 부여된다. 중복된 값은 모두 같은 순위의 값이 부여된다.

계산 방법은 다음과 같이 함수에 따라 달라진다.

함수설명
집계 함수

파라미터 값으로 구성된 가상의 로우에 대한 순위 값을 계산하다.

파라미터는 각 그룹마다 상수 값을 가져야 하며 order_by_clause의 표현식과 대응되어야 한다.

분석 함수

각 로우의 그룹 내 순위를 반환한다.

순위는 order_by_clause 내의 expr 값을 기준으로 정렬한 결과가 부여된다.

DENSE_RANK의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    • dense_rank_aggregation

      구성요소설명
      expr임의의 연산식이다.
      order_by_clause분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다. 자세한 내용은 “4.1.3. 분석 함수”order_by_clause를 참고한다.
    • dense_rank_analytic

      구성요소설명
      partition_by현재 질의 블록의 결과 집합을 expr 또는 expr의 리스트를 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
      order_by_clause분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다. 자세한 내용은 “4.1.3. 분석 함수”order_by_clause를 참고한다.
  • 예제

    다음은 DENSE_RANK 함수를 사용하는 예이다.

    SQL> SELECT DEPTNO, DENSE_RANK(3000) WITHIN GROUP (ORDER BY SAL)
           AS DENSE_RANK
         FROM EMP GROUP BY DEPTNO;
    
        DEPTNO DENSE_RANK
    ---------- ----------
            10          3
            20          4
            30          6
    
    3 rows selected.
  • 분석 함수 예제

    다음은 DENSE_RANK 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, DENSE_RANK() 
           OVER (PARTITION BY DEPTID ORDER BY SALARY) 
         FROM EMP;
    
    NAME                     DEPTID     SALARY DENSE_RANK
    -------------------- ---------- ---------- ----------
    Paul                          1       3000          1
    Angela                        1       3000          1
    Nick                          1       3200          2
    Scott                         1       4000          3
    James                         1       4000          3
    John                          1       4500          4
    Joe                           2       4000          1
    Brad                          2       4200          2
    Daniel                        2       5000          3
    Tom                           2       5000          3
    Kathy                         2       5000          3
    Bree                          2       6000          4
    
    12 rows selected.

GROUPING_ID는 로우의 GROUPING 비트 벡터(Bit Vector)에 해당하는 NUMBER를 반환하는 함수이다.

GROUPING_ID는 여러 GROUPING 함수의 결과를 비트 벡터로 통합하는 것과 같다. GROUPING_ID 함수를 사용하면 다수의 GROUPING 함수를 사용하는 것을 피할 수 있으며, 로우 필터링의 조건을 보다 쉽게 표현할 수 있다. GROUPING_ID를 이용한 로우 필터링은 GROUPING_ID = n과 같은 조건으로 간단히 처리할 수 있다.

GROUPING_ID는 GROUPING 함수와 ROLLUP 또는 CUBE가 사용된 SELECT 문에서만 사용할 수 있다. GROUP BY가 여러 번 사용된 질의의 경우 특정 로우의 GROUP BY 수준을 결정하기 위해서는 GROUPING 함수를 여러 번 사용해야 하는데, 이는 복잡한 SQL 문장을 생성하게 된다. GROUPING_ID는 이러한 경우에 유용하다.

GROUPING_ID의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    exprGROUP BY clause에 명시된 expr 중의 하나와 대응하여야 한다.
  • 예제

    다음은 GROUPING_ID 함수를 사용하는 예이다.

    SQL> SELECT 
           DECODE(GROUPING(DNO),1,'ALL',DNO) AS DNO,
           DECODE(GROUPING(JOB),1,'ALL',JOB) AS JOB,
           GROUPING(DNO) AS GD,
           GROUPING(JOB) AS GJ,
           GROUPING_ID(DNO, JOB) AS DJ,
           GROUPING_ID(DNO, JOB) AS JD,
           SUM(PAY) AS PAY
         FROM PERSONNEL
         GROUP BY CUBE(DNO, JOB)
         ORDER BY DNO, JOB;
    
           DNO JOB                    GD   GJ   DJ   JD         PAY
    ---------- -------------------- ---- ---- ---- ----  ----------
            10 ANALYST                 0    0    0    0        5950
            10 MANAGER                 0    0    0    0        1000
            10 PRESIDENT               0    0    0    0        7000
            10 ALL                     0    1    1    2       13950
            20 CLERK                   0    0    0    0        4000
            20 MANAGER                 0    0    0    0        3974
            20 ALL                     0    1    1    2        7974
            30 MANAGER                 0    0    0    0        3550
            30 SALESMAN                0    0    0    0        4250
            30 ALL                     0    1    1    2        7800
           ALL ANALYST                 1    0    2    1        5950
           ALL CLERK                   1    0    2    1        4000
           ALL MANAGER                 1    0    2    1        8524
           ALL PRESIDENT               1    0    2    1        7000
           ALL SALESMAN                1    0    2    1        4250
           ALL ALL                     1    1    3    3       29724
    
    16 rows selected.

LAG는 자기 자신과 조인하지 않고도 한 테이블에서 여러 개의 로우를 동시에 볼 수 있는 분석 함수이다. LAG는 명시된 수만큼 현재 로우에서 앞서 있는 로우에 접근을 제공한다.

LAG의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    exprexpr에 LAG를 포함한 다른 분석 함수를 명시할 수 없다. 즉, 분석 함수를 중첩해서 사용할 수는 없다.
    offset접근 횟수를 offset에 명시한다. offset을 명시하지 않으면 1로 간주된다.
    default

    offset이 윈도우의 범위를 초과하면 default에서 지정한 값이 반환된다.

    default를 명시하지 않으면 NULL이 반환된다.

    partition_by현재 질의 블록의 결과 집합을 expr을 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
    order_by_clause분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다. 자세한 내용은 “4.1.3. 분석 함수”order_by_clause를 참고한다.
  • 예제

    다음은 LAG 함수를 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, LAG (SALARY, 2, 0)
           OVER (PARTITION BY DEPTID ORDER BY SALARY) PSAL
         FROM EMP;
    
    NAME                     DEPTID     SALARY       PSAL
    -------------------- ---------- ---------- ----------
    Paul                          1       3000          0
    Angela                        1       3000          0
    Nick                          1       3200       3000
    Scott                         1       4000       3000
    James                         1       4000       3200
    John                          1       4500       4000
    Joe                           2       4000          0
    Brad                          2       4200          0
    Daniel                        2       5000       4000
    Tom                           2       5000       4200
    Kathy                         2       5000       5000
    Bree                          2       6000       5000
    
    12 rows selected.

LEAD는 자기 자신과 조인하지 않고도 한 테이블에서 여러 개의 로우를 동시에 볼 수 있는 분석 함수이다. LEAD는 명시된 수만큼 현재 로우에서 뒤에 나오는 로우에 접근을 제공한다.

LEAD의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    exprexpr에 LEAD를 포함한 다른 분석 함수를 명시할 수 없다. 즉, 분석 함수를 중첩해서 사용할 수는 없다.
    offset접근 횟수를 offset에 명시한다. offset을 명시하지 않으면 1로 간주된다.
    default

    offset이 윈도우의 범위를 초과하면 default에서 지정한 값이 반환된다.

    default를 명시하지 않으면 NULL이 반환된다.

    partition_by현재 질의 블록의 결과 집합을 expr을 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
    order_by_clause분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다. 자세한 내용은 “4.1.3. 분석 함수”order_by_clause를 참고한다.
  • 예제

    다음은 LEAD 함수를 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, LEAD (SALARY, 2, 0)
           OVER (PARTITION BY DEPTID ORDER BY SALARY) PSAL
         FROM EMP;
    
    NAME                     DEPTID     SALARY       PSAL
    -------------------- ---------- ---------- ----------
    Paul                          1       3000       3200
    Angela                        1       3000       4000
    Nick                          1       3200       4000
    Scott                         1       4000       4500
    James                         1       4000          0
    John                          1       4500          0
    Joe                           2       4000       5000
    Brad                          2       4200       5000
    Daniel                        2       5000       5000
    Tom                           2       5000       6000
    Kathy                         2       5000          0
    Bree                          2       6000          0
    
    12 rows selected.

LISTAGG“4.2.4. AGGR_CONCAT”과 동일한 기능을 하는 함수이다. Oracle과의 호환성을 위해 추가되었다.

AGGR_CONCAT과는 다음과 같은 사용법에 차이가 있다.

  • set_quantifier 를 사용할 수 없다.

  • separator를 생략할 수 있고 기본값은 NULL이다.

  • order_by_clause는 WITHIN GROUP 이후에 명시하고 생략할 수 없다.

LISTAGG의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr문자열이나 문자열로 변환될 수 있는 임의의 연산식이다.
    separatorexpr과 접합될 구분자를 나타내는 문자 리터럴이다.
    order_by_clause

    접합할 문자열을 어떻게 정렬할지를 명시한다.

    자세한 내용은 “4.1.3. 분석 함수”order_by_clause를 참고한다.

    query_partition_clause쿼리 결과에 대해 어떻게 그룹화 할지를 명시한다.
  • 예제

    다음은 LISTAGG 함수를 사용하는 예이다.

    SQL> SELECT LISTAGG(ENAME, ',') WITHin GROUP (ORDER BY EMPNO) AS "EMPLOYEE"
       2 FROM EMP 
       3 GROUP BY DEPTNO;
    
    EMPLOYEE
    --------------------------------------------------------------------------------
    CLARK,KING,MILLER
    SMITH,JONES,SCOTT,ADAMS,FORD
    ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
    
    3 rows selected.

MAX는 그룹 내의 모든 로우에 대한 expr 값 중의 최댓값을 구하는 함수이다. 분석 함수로도 사용할 수 있다. 이 함수를 분석 함수로 사용할 때 DISTINCT 예약어를 명시하면 analytic_clause에서 partition_by만 명시할 수 있다. order_by_clause는 명시할 수 없다.

MAX의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    set_quantifier

    질의 결과에 중복된 로우의 허용, 비허용 여부를 지정한다.

    DISTINCT, UNIQUE, ALL을 지정할 수 있다.

    • DISTINCT, UNIQUE : 중복된 로우를 제거한다.

    • ALL : 모든 로우를 선택한다. (기본값)

    expr임의의 연산식이다. expr 앞에 DISTINCT 예약어를 포함하면, 최댓값을 구하기 전에 expr 값 중에서 중복된 값을 먼저 제거한다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 MAX 함수를 사용하는 예이다.

    SQL> SELECT DEPTID, MAX(SALARY) FROM EMP2 GROUP BY DEPTID;
    
        DEPTID MAX(SALARY)
    ---------- -----------
             1       4500
             2       6000
    
    2 rows selected.
  • 분석 함수 예제

    다음은 MAX 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, MAX(SALARY) 
           OVER (PARTITION BY DEPTID) AS MSAL 
         FROM EMP2;
    
    NAME                     DEPTID     SALARY       MSAL
    -------------------- ---------- ---------- ----------
    Paul                          1       3000       4500
    Nick                          1       3200       4500
    Scott                         1       4000       4500
    John                          1       4500       4500
    Bree                          2       6000       6000
    Daniel                        2       5000       6000
    Joe                           2       4000       6000
    Brad                          2       4200       6000
    
    8 rows selected.

MIN은 그룹 내의 모든 로우에 대한 expr 값 중의 최솟값을 구하는 함수이다. 분석 함수로도 사용할 수 있다. 이 함수를 분석 함수로 사용할 때 DISTINCT 예약어를 명시하면 analytic_clause에서 partition_by만 명시할 수 있다. order_by_clause는 명시할 수 없다.

MIN의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    set_quantifier

    질의 결과에 중복된 로우의 허용, 비허용 여부를 지정한다.

    DISTINCT, UNIQUE, ALL을 지정할 수 있다.

    • DISTINCT, UNIQUE : 중복된 로우를 제거한다.

    • ALL : 모든 로우를 선택한다. (기본값)

    expr임의의 연산식이다. expr 앞에 DISTINCT 예약어를 포함하면, 최솟값을 구하기 전에 expr 값 중에서 중복된 값을 먼저 제거한다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 MIN 함수를 사용하는 예이다.

    SQL> SELECT DEPTID, MIN(SALARY) FROM EMP2 GROUP BY DEPTID;
    
        DEPTID MIN(SALARY)
    ---------- ----------
             1       3000
             2       4000
    
    2 rows selected.
  • 분석 함수 예제

    다음은 MIN 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, MIN(SALARY) 
           OVER (PARTITION BY DEPTID) AS MSAL 
         FROM EMP2;
    
    NAME                     DEPTID     SALARY       MSAL
    -------------------- ---------- ---------- ----------
    Paul                          1       3000       3000
    Nick                          1       3200       3000
    Scott                         1       4000       3000
    John                          1       4500       3000
    Bree                          2       6000       4000
    Daniel                        2       5000       4000
    Joe                           2       4000       4000
    Brad                          2       4200       4000
    
    8 rows selected.

PERCENT_RANK는 파라미터로 주어진 값의 그룹 내의 위치를 나타내 주는 함수이다. 반환되는 값은 0 ~ 1사이의 값이고 NUMBER 타입이다. 분석 함수로도 사용할 수 있다.

계산 방법은 다음과 같이 함수에 따라 달라진다.

함수설명
집계 함수주어진 파라미터로 구성된 가상의 로우의 RANK 값을 계산하여 1을 빼고 그룹 안의 로우의 개수로 나눈다. 파라미터의 값은 그룹 안에서는 상수 값을 가져야 하며 ORDER BY절의 표현식과 대응되어야 한다.
분석 함수주어진 파라미터로 구성된 가상의 로우의 RANK 값에서 1을 뺀 값을 그룹 안의 로우의 개수에서 1을 뺀 값으로 나눈다.

PERCENT_RANK의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 값을 반환하는 임의의 연산식이다.
    partition_by현재 질의 블록의 결과 집합을 expr 또는 expr의 리스트를 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
    order_by_clause분할된 하나의 파티션 내에서 로우를 어떻게 정렬할지를 명시한다. 자세한 내용은 “4.1.3. 분석 함수”order_by_clause를 참고한다.
  • 예제

    다음은 PERCENT_RANK 함수를 사용하는 예이다.

    SQL> SELECT PERCENT_RANK(1000) WITHIN GROUP (ORDER BY SAL)
           AS PERCENT_RANK
         FROM EMP;
    
    PERCENT_RANK
    ------------
    .14285714286
    
    1 row selected.
  • 분석 함수 예제

    다음은 PERCENT_RANK 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT PERCENT_RANK() 
           OVER (PARTITION BY DEPTNO ORDER BY SAL) AS PERCENT_RANK
         FROM EMP;
    
    PERCENT_RANK
    ------------
               0
              .5
               1
               0
             .25
              .5
             .75
             .75
               0
              .2
              .2
              .6
              .8
               1
    
    14 rows selected.

PERCENTILE_CONT는 연속 분포 모델에서 파라미터로 주어진 백분위 값에 해당하는 값을 계산하는 역분포 함수이다. 분석 함수로도 사용할 수 있다. 계산을 할 때 NULL 값은 무시한다.

파라미터의 표현식의 값은 백분위 값으로 그룹 내에서 0에서 1사이의 상수여야 한다. ORDER BY 절의 표현식은 보간을 계산할 수 있는 수치 또는 날짜형의 데이터 타입이어야 한다.

PERCENTILE_CONT는 정렬 스펙에 맞게 정렬한 후 보간법에 따라 계산한다. 이를 위해 다음과 같이 RN, CRN, FRN 값을 계산한다.

RN=(1+(P*(N-1)))
CRN=CEILING(RN)
FRN=FLOOR(RN)
구분설명
P파라미터로 주어진 백분위 값이다.
N그룹 내의 NULL이 아닌 로우의 개수이다.

최종 결과는 CRN과 FRN이 같다면 RN번째 행의 expr의 값이고, 다르다면 다음과 같이 계산한다.

(CRN-RN) * (value of expr at FRN) + (RN-FRN) * (value of expr at CRN)

PERCENTILE_CONT의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 값을 반환하는 임의의 연산식이다.

    ASC

    DESC

    • ORDER BY ASC는 결과를 오름차순으로 정렬한다. (기본값)

    • ORDER BY DESC는 결과를 내림차순으로 정렬한다.

    partition_by현재 질의 블록의 결과 집합을 expr 또는 expr의 리스트를 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
  • 예제

    다음은 PERCENTILE_CONT 함수를 사용하는 예이다.

    SQL> SELECT DEPTNO, PERCENTILE_CONT(0.35) 
           WITHIN GROUP (ORDER BY SAL) 
         FROM EMP GROUP BY DEPTNO;
    
        DEPTNO PERCENTILE_CONT(0.35)WITHINGRO
    ---------- -------------------------------
            10                            2105
            20                            1850
            30                            1250
    
    3 rows selected.
  • 분석 함수 예제

    다음은 PERCENTILE_CONT 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, PERCENTILE_CONT(0.35) 
           WITHIN GROUP (ORDER BY SAL) OVER (PARTITION BY DEPTNO) 
         FROM EMP;
    
        DEPTNO      EMPNO PERCENTILE_CONT(0.35)WITHINGRO
    ---------- ---------- -------------------------------
            10       7934                            2105
            10       7782                            2105
            10       7839                            2105
            20       7369                            1850
            20       7876                            1850
            20       7566                            1850
            20       7788                            1850
            20       7902                            1850
            30       7900                            1250
            30       7521                            1250
            30       7654                            1250
            30       7844                            1250
            30       7499                            1250
            30       7698                            1250
    
    14 rows selected.

PERCENTILE_DISC는 이산 분포를 가정한 역분산 함수이다. 분석 함수로도 사용할 수 있다. 계산을 할 때 NULL 값은 무시한다. 파라미터의 표현식의 값은 백분위 값으로 그룹 내에서 0 ~ 1사이의 상수이어야 한다. ORDER BY 절로 정렬을 할 수 있는 타입이어야 한다.

PERCENTILE_DISC의 값을 계산하기 위해 다음과 같이 RN을 계산한다. 계산된 결과 값은 CRN에 해당하는 행의 expr 값이다.

RN=N*P
CRN=CEILING(RN)

PERCENTILE_DISC의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 값을 반환하는 임의의 연산식이다.

    ASC

    DESC

    • ORDER BY ASC는 결과를 오름차순으로 정렬한다. (기본값)

    • ORDER BY DESC는 결과를 내림차순으로 정렬한다.

    partition_by현재 질의 블록의 결과 집합을 expr 또는 expr의 리스트를 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
  • 예제

    다음은 PERCENTILE_DISC 함수를 사용하는 예이다.

    SQL> SELECT DEPTNO, PERCENTILE_DISC(0.15) 
           WITHIN GROUP (ORDER BY SAL) AS PERCENTILE_DISC 
         FROM EMP GROUP BY DEPTNO;
    
        DEPTNO PERCENTILE_DISC
    ---------- ---------------
            10            1300
            20             800
            30             950
    
    3 rows selected.
  • 분석 함수 예제

    다음은 PERCENTILE_DISC 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, PERCENTILE_DISC(0.15) 
           WITHIN GROUP (ORDER BY SAL) OVER (PARTITION BY DEPTNO) AS PERCENTILE_DISC 
         FROM EMP;
    
        DEPTNO PERCENTILE_DISC
    ---------- ---------------
            10            1300
            10            1300
            10            1300
            20             800
            20             800
            20             800
            20             800
            20             800
            30             950
            30             950
            30             950
            30             950
            30             950
            30             950
    
    14 rows selected.

RANK는 그룹별로 로우를 정렬한 후 그룹 내의 각 로우의 순위를 반환하는 함수이다. 분석 함수로도 사용할 수 있다.

순위의 데이터 타입은 NUMBER이다. 순위를 산정할 때 동률이 나타났을 경우는 동률인 모든 로우에 대해 같은 순위가 부여된다. 그 다음 부여되는 순위는 같은 순위가 부여된 로우의 개수만큼 증가된 값이 부여된다. 따라서 순위는 연속된 숫자가 아닐 수도 있다.

계산 방법은 다음과 같이 함수에 따라 달라진다.

함수설명
집계 함수

파라미터 값으로 구성된 가상의 로우에 대한 순위 값을 계산한다.

파라미터는 각 그룹마다 상수 값을 가져야 하며 order_by_clause의 표현식과 대응되어야 한다.

분석 함수각 로우의 그룹 내 순위를 반환한다. 순위는 order_by_clause 내의 expr 값을 기준으로 정렬한 결과가 부여된다.

RANK의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 값을 반환하는 임의의 연산식이다.

    ASC

    DESC

    • ORDER BY ASC는 결과를 오름차순으로 정렬한다. (기본값)

    • ORDER BY DESC는 결과를 내림차순으로 정렬한다.

    partition_by현재 질의 블록의 결과 집합을 expr 또는 expr의 리스트를 기준으로 분할한다. 자세한 내용은 “4.1.3. 분석 함수”partition_by를 참고한다.
  • 예제

    다음은 RANK 함수를 사용하는 예이다.

    SQL> SELECT DEPTNO, RANK(3000) WITHIN GROUP (ORDER BY SAL) AS RANK
         FROM EMP
         GROUP BY DEPTNO;
    
        DEPTNO       RANK
    ---------- ----------
            10          3
            20          4
            30          7
    
    3 rows selected.
  • 분석 함수 예제

    다음은 RANK 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, RANK() 
           OVER (PARTITION BY DEPTID ORDER BY SALARY) 
         FROM EMP;
    
    NAME                     DEPTID     SALARY RANK()OVER
    -------------------- ---------- ---------- ----------
    Paul                          1       3000          1
    Angela                        1       3000          1
    Nick                          1       3200          3
    Scott                         1       4000          4
    James                         1       4000          4
    John                          1       4500          6
    Joe                           2       4000          1
    Brad                          2       4200          2
    Daniel                        2       5000          3
    Tom                           2       5000          3
    Kathy                         2       5000          3
    Bree                          2       6000          6
    
    12 rows selected.

REGEXP_COUNT는 입력 문자열 내에서 정규표현식으로 주어진 패턴이 몇 번이나 일치하는지 반환하는 함수이다(이 기능은 ICU 정규 표현식 표준을 따른다).

REGEXP_COUNT의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    source_str

    문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있다.

    pattern

    정규표현식으로 작성된 문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있고, 만약 source_str과 타입이 다를 경우 source_str 타입으로 변환된다.

    position

    숫자값을 반환하는 임의의 연산식으로 패턴검사를 시작할 위치를 지정한다.

    (기본값: 1)

    match_param

    문자열을 반환하는 임의의 연산식으로 패턴을 검사할 방법을 설정한다.

    다음과 같은 값을 사용할 수 있고, 여러 개를 동시에 지정할 수 있다.

    • 'i' : 대소문자를 구분하지 않는다.

    • 'c' : 대소문자를 구분한다.

    • 'n' : 점(.)이 줄바꿈 문자도 포함한다.

    • 'm' : 입력문자열이 한줄 이상이다.

    • 'x' : pattern의 공백문자를 무시한다.

    예를 들어 'ic'와 같이 상호충돌하는 값을 지정하였을 경우엔 마지막 값만 사용한다. 즉, 'ic'는 대소문자를 구분한다.

  • 예제

    다음은 REGEXP_COUNT 함수를 사용하는 예이다.

    SQL> SELECT REGEXP_COUNT('abcabcabc','abc', 2) FROM DUAL;
    
    REGEXP_COUNT('ABCABCABC','ABC',2)
    ---------------------------------
                                    2
    
    1 row selected.          

REGEXP_INSTR는 입력 문자열 내에서 정규표현식으로 주어진 패턴이 일치하는지 위치를 반환하는 함수이다. 만약 입력 문자열과 일치하지 않으면 0을 반환한다(이 기능은 ICU 정규 표현식 표준을 따른다).

REGEXP_INSTR의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명

    sou

    (source_str)

    문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있다.

    pat

    (pattern)

    정규표현식으로 작성된 문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있고, 만약 source_str과 타입이 다를 경우 source_str 타입으로 변환된다.

    pos

    (position)

    숫자값을 반환하는 임의의 연산식으로 패턴검사를 시작할 위치를 지정한다.

    (기본값: 1)

    occ

    (occurrence)

    숫자값을 반환하는 임의의 연산식으로 패턴을 몇번 검사할지를 지정한다.

    (기본값: 1)

    ret

    (return_option)

    숫자값을 반환하는 임의의 연산식이다.

    • 0 : 패턴과 일치하는 문자열의 처음 위치를 반환한다. (기본값)

    • 1 : 패턴과 일치하는 문자열 다음 문자의 위치를 반환한다.

    mat

    (match_param)

    문자열을 반환하는 임의의 연산식으로 패턴을 어떤 방법으로 검사할지를 지정한다. REGEXP_COUNT 함수와 같은 특성을 가진다.

    sub

    (sub_expr)

    숫자값을 반환하는 임의의 연산식으로 0부터 9까지 사용할 수 있다. (기본값: 0)

    sub_expr은 pattern에서 괄호로 감싸진 각 그룹들을 왼쪽부터 숫자로 지정한다. 예를 들어 다음과 같은 정규표현식이 주어졌을 때 모두 4개의 그룹이 존재한다.

    (tibero(is(a)(rdbms)))         

    왼쪽부터 "tiberoisardbms", "isardbms", "a", "rdbms"이며 각 1, 2, 3, 4에 해당된다.

  • 예제

    다음은 REGEXP_INSTR 함수를 사용하는 예이다.

    SQL> SELECT REGEXP_INSTR('abcabcabc','abc', 2) FROM DUAL;
    
    REGEXP_INSTR('ABCABCABC','ABC',2)
    ---------------------------------
                                    4
    
    1 row selected.          

REGEXP_REPLACE는 입력 문자열내에서 정규표현식으로 주어진 패턴을 탐색하여 다른 문자열로 대치하는 함수이다(이 기능은 ICU 정규 표현식 표준을 따른다).

REGEXP_REPLACE의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명

    sou

    (source_str)

    문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있다.

    pat

    (pattern)

    정규표현식으로 작성된 문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있고, 만약 source_str과 타입이 다를 경우 source_str 타입으로 변환된다.

    rep

    (replace_str)

    문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있고, 만약 source_str과 타입이 다를 경우 source_str 타입으로 변환된다.

    pos

    (position)

    숫자값을 반환하는 임의의 연산식으로 패턴검사를 시작할 위치를 지정한다.

    (기본값: 1)

    occ

    (occurrence)

    숫자값을 반환하는 임의의 연산식으로 패턴을 몇번 검사할지를 지정한다.

    (기본값: 1)

    mat

    (match_param)

    문자열을 반환하는 임의의 연산식으로 패턴을 어떤 방법으로 검사할지를 지정한다. REGEXP_COUNT 함수와 같은 특성을 가진다.
  • 예제

    다음은 REGEXP_REPLACE 함수를 사용하는 예이다.

    SQL> SELECT REGEXP_REPLACE('aaaaaaa','([[:alpha:]])', 'x') FROM DUAL;
    
    REGEXP_REPLACE('AAAAAAA','([[:ALPHA:]])','X')
    ---------------------------------------------
    xxxxxxx
    
    1 row selected.          

REGEXP_SUBSTR는 입력 문자열내에서 정규표현식으로 주어진 패턴을 탐색하여 해당 문자열을 반환하는 함수이다(이 기능은 ICU 정규 표현식 표준을 따른다).

REGEXP_SUBSTR의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명

    sou

    (source_str)

    문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있다.

    pat

    (pattern)

    정규표현식으로 작성된 문자열을 반환하는 임의의 연산식이다.

    CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입을 사용할 수 있고, 만약 source_str과 타입이 다를 경우 source_str 타입으로 변환된다.

    pos

    (position)

    숫자값을 반환하는 임의의 연산식으로 패턴검사를 시작할 위치를 지정한다.

    (기본값: 1)

    occ

    (occurrence)

    숫자값을 반환하는 임의의 연산식으로 패턴을 몇번 검사할지를 지정한다.

    (기본값: 1)

    mat

    (match_param)

    문자열을 반환하는 임의의 연산식으로 패턴을 어떤 방법으로 검사할지를 지정한다. REGEXP_COUNT 함수와 같은 특성을 가진다.

    sub

    (sub_expr)

    숫자값을 반환하는 임의의 연산식으로 0부터 9까지 사용할 수 있다. (기본값: 0)

    REGEXP_INSTR 함수와 같은 특성을 가진다.

  • 예제

    다음은 REGEXP_SUBSTR 함수를 사용하는 예이다.

    SQL> SELECT REGEXP_SUBSTR('123456','3.*5', 1) FROM DUAL;
    
    REGEXP_SUBSTR('123456','3.*5',1)
    --------------------------------
    345
    
    1 row selected.          

ROUND(date)는 date를 format에 명시된 단위로 반올림한 결과를 반환하는 함수이다.

ROUND(date)의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    date날짜를 반환하는 임의의 연산식이다.
    format

    반올림 단위를 명시하는 포맷 모델을 나타내는 문자열이다.

    format이 명시되지 않으면 'DD' 형식의 문자열을 이용하여 가장 가까운 날로 반올림한다. format으로 'YEAR', 'MONTH', 'DAY' 등을 사용할 수 있다.

    ROUND(date) 함수의 format에 명시할 수 있는 형식 문자열은 다음과 같다.

    • CC, SCC : year 4자리 중 아래 2자리로 반올림/버림 후 1년 큰 값이다. (예: xx01년)

    • IYYY, IYY, IY, I : ISO year 값에 대해 7월 1일 전/후로 반올림 또는 버림을 한다.

    • SYYYY, YYYY, YYY, YY, Y, YEAR, SYEAR : year 값에 대해 7월 1일 전/후로 반올림 또는 버림을 한다.

    • Q : 분기 값에 대해 각 분기의 두 번째 달의 16번째 날 전/후로 반올림 또는 버림을 한다.

    • MONTH, MON, MM, RM : month 값에 대해 16번째 날 전/후로 반올림 또는 버림을 한다.

    • WW : 그 해의 첫 번째 날(1월 1일)을 한 주의 시작으로 해서, week 값에 대해 반올림 또는 버림을 한다.

    • IW : 그 주의 월요일을 한 주의 시작으로 해서, week 값에 대해 반올림 또는 버림을 한다.

    • W : 그 달의 첫 번째 날(1일)과 같은 요일이 되도록 week 값에 대해 반올림 또는 버림을 한다.

    • DDD, DD, J : day 값에 대해 오후 12시 전/후로 반올림 또는 버림을 한다.

    • DAY, DY, D : week 값에 대해 수요일 오후 12시 전/후로 반올림 또는 버림을 한다.

    • HH24, HH12, HH : hour 값에 대해 30분 전/후로 반올림 또는 버림을 한다.

    • MI : minute 값에 대해 30초 전/후로 반올림 또는 버림을 한다.

  • 예제

    다음은 ROUND(date) 함수를 사용하는 예이다.

    SQL> SELECT ROUND(TO_DATE('2005/06/22'), 'YEAR') AS TO_DATE
         FROM DUAL;
    
    TO_DATE                         
    --------------------------------
    2005/01/01   
    
    1 row selected.                    
    
    SQL> SELECT TO_CHAR(ROUND(TO_DATE('1998/6/20', 
           'YYYY/MM/DD'), 'CC'), 'YYYY/MM/DD') AS TO_DATE
         FROM DUAL;
    
    TO_DATE   
    ----------
    2001/01/01           
    
    1 row selected.                                             
    
    SQL> SELECT TO_CHAR(ROUND(TO_DATE('-3741/01/02', 
           'SYYYY/MM/DD'), 'CC'), 'SYYYY/MM/DD') AS TO_DATE
         FROM DUAL;
    
    TO_DATE    
    -----------
    -3700/01/01                                                            
    
    1 row selected.
    
    SQL> SELECT TO_CHAR(ROUND(TO_DATE('2005/01/26 12:30:14', 
           'YYYY/MM/DD HH24:MI:SS'), 'DY'), 'YYYY/MM/DD') AS TO_DATE
         FROM DUAL;
    
    TO_DATE   
    ----------
    2005/01/30
    
    1 row selected.
    
    SQL> SELECT ROUND(TO_DATE('2005/01/26 12:30:14', 
           'YYYY/MM/DD HH24:MI:SS')) AS TO_DATE
         FROM DUAL;
    
    TO_DATE                         
    --------------------------------
    2005/01/27
    
    1 row selected.

STDDEV는 expr의 표본 표준편차를 반환하는 함수이다. 분석 함수로도 사용할 수 있다. Tibero는 표준편차의 값을 VARIANCE 집합 함수 값의 제곱근으로 계산한다.

이 함수는 모든 수치 데이터 타입과 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 파라미터로 받아 들인다. 입력된 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다.

STDDEV_SAMP 함수와 STDDEV 함수의 차이점은 입력 데이터의 크기가 단 하나의 로우일 경우 STDDEV 함수는 0을 반환하는 반면 STDDEV_SAMP 함수는 NULL 값을 반환한다는 것이다.

STDDEV의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 값을 반환하는 임의의 연산식이다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 STDDEV 함수를 사용하는 예이다.

    SQL> SELECT STDDEV(AGE) FROM EMP_AGE;
     
    STDDEV(AGE)
    -----------
    3.034981237
     
    1 row selected.
  • 분석 함수 예제

    다음은 STDDEV 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, STDDEV(SAL)
           OVER (PARTITION BY DEPTNO) AS STDDEV
         FROM EMP;
    
        DEPTNO      EMPNO     STDDEV
    ---------- ---------- ----------
            10       7934 1893.62967
            10       7839 1893.62967
            10       7782 1893.62967
            20       7566  1123.3321
            20       7788  1123.3321
            20       7876  1123.3321
            20       7902  1123.3321
            20       7369  1123.3321
            30       7654 668.331255
            30       7698 668.331255
            30       7521 668.331255
            30       7499 668.331255
            30       7844 668.331255
            30       7900 668.331255
    
    14 rows selected.

STDDEV_POP는 expr의 모표준편차를 반환하는 함수이다. 분석 함수로도 사용할 수 있다. Tibero는 모표준편차의 값을 VARIANCE_POP 집합 함수 값의 제곱근으로 계산한다. 이 함수는 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다.

STDDEV_POP의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 데이터 타입 또는 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 갖는 임의의 연산식이다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 STDDEV_POP 함수를 사용하는 예이다.

    SQL> SELECT STDDEV_POP(AGE) FROM EMP_AGE;
     
    STDDEV_POP(AGE)
    ---------------
    2.8792360097776
    
    1 row selected.
  • 분석 함수 예제

    다음은 STDDEV_POP 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, STDDEV_POP(SAL)
           OVER (PARTITION BY DEPTNO) AS STDDEV_POP
         FROM EMP;
    
        DEPTNO      EMPNO STDDEV_POP
    ---------- ---------- ----------
            10       7934 1546.14215
            10       7839 1546.14215
            10       7782 1546.14215
            20       7566 1004.73877
            20       7788 1004.73877
            20       7876 1004.73877
            20       7902 1004.73877
            20       7369 1004.73877
            30       7654 610.100174
            30       7698 610.100174
            30       7521 610.100174
            30       7499 610.100174
            30       7844 610.100174
            30       7900 610.100174
    
    14 rows selected.

STDDEV_SAMP는 expr의 누적 표본 표준편차를 반환하는 함수이다. 분석 함수로도 사용할 수 있다. Tibero는 누적 표본 표준편차의 값을 VARIANCE_SAMP 집합 함수 값의 제곱근으로 계산한다. 이 함수는 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다.

STDDEV_SAMP의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 데이터 타입 또는 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 갖는 임의의 연산식이다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 STDDEV_SAMP 함수를 사용하는 예이다.

    SQL> SELECT STDDEV_SAMP(AGE) FROM EMP_AGE;
     
    STDDEV_SAMP(AGE)
    ----------------
    3.03498123735734
     
    1 row selected.
  • 분석 함수 예제

    다음은 STDDEV_SAMP 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, STDDEV_SAMP(SAL)
           OVER (PARTITION BY DEPTNO) AS STDDEV_SAMP
         FROM EMP;
    
        DEPTNO      EMPNO STDDEV_SAMP
    ---------- ---------- -----------
            10       7782  1893.62967
            10       7839  1893.62967
            10       7934  1893.62967
            20       7566   1123.3321
            20       7902   1123.3321
            20       7876   1123.3321
            20       7369   1123.3321
            20       7788   1123.3321
            30       7521  668.331255
            30       7844  668.331255
            30       7499  668.331255
            30       7900  668.331255
            30       7698  668.331255
            30       7654  668.331255
    
    14 rows selected.

SUM은 그룹 내의 모든 로우에 대한 expr 값의 합계를 구하는 함수이다. 분석 함수로도 사용할 수 있다.

이 함수를 분석 함수로 사용할 때 DISTINCT 예약어를 명시하면 analytic_clause에서 partition_by만 명시할 수 있다. order_by_clause는 명시할 수 없다.

SUM의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    set_quantifier

    질의 결과에 중복된 로우의 허용, 비허용 여부를 지정한다.

    DISTINCT, UNIQUE, ALL을 지정할 수 있다.

    • DISTINCT, UNIQUE : 중복된 로우를 제거한다.

    • ALL : 모든 로우를 선택한다. (기본값)

    expr임의의 연산식이다. expr 앞에 DISTINCT 예약어를 포함하면, 합계를 구하기 전에 expr 값 중에서 중복된 것을 먼저 제거한다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 SUM 함수를 사용하는 예이다.

    SQL> SELECT DEPTID, SUM(SALARY) FROM EMP2 GROUP BY DEPTID;
    
        DEPTID SUM(SALARY)
    ---------- ----------
             1      14700
             2      19200
    
    2 rows selected.
  • 분석 함수 예제

    다음은 SUM 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT NAME, DEPTID, SALARY, SUM(SALARY) 
           OVER (PARTITION BY DEPTID) 
         FROM EMP2;
    
    NAME                     DEPTID     SALARY SUM(SALARY)
    -------------------- ---------- ---------- ----------
    Paul                          1       3000      14700
    Nick                          1       3200      14700
    Scott                         1       4000      14700
    John                          1       4500      14700
    Bree                          2       6000      19200
    Daniel                        2       5000      19200
    Joe                           2       4000      19200
    Brad                          2       4200      19200
    
    8 rows selected.
    
    SQL> SELECT NAME, SALARY, SUM(SALARY) 
           OVER (ORDER BY SALARY RANGE UNBOUNDED PRECEDING) 
         FROM EMP3;
    
    NAME                     SALARY SUM(SALARY)
    -------------------- ---------- ----------
    Paul                       3000       3000
    Nick                       3200       9400
    Scott                      3200       9400
    John                       3500      12900
    Bree                       4000      16900
    Daniel                     4500      25900
    Joe                        4500      25900
    
    7 rows selected.

SYS_CONTEXT는 문맥 네임스페이스(CONTEXT NAMESPACE)와 관련된 파라미터의 값을 반환하는 함수이다. 문맥 네임스페이스와 파라미터는 문자열이나 표현식으로 정의할 수 있으며, 함수의 반환값은 VARCHAR 타입이다.

Tibero에서 디폴트로 제공하고 있는 문맥 네임스페이스는 USERENV이다.

  • USERENV 파라미터

    파라미터설명
    CLIENT_IDENTIFIERDBMS_SESSION.SET_IDENTIFIER 프러시저에 의해 정의된 클라이언트 식별자를 반환한다.
    CURRENT_SCHEMA현재 활성화된 스키마 이름을 반환한다. 이 값은 ALTER SESSION SET CURRENT_SCHEMA 구문에 의해 변경될 수 있다.
    CURRENT_SCHEMAID현재 활성화된 스키마 식별번호를 반환한다.
    CURRENT_SQL현재 수행 중인 SQL 문장을 반환한다.
    DB_NAMEDB_NAME 초기화 파라미터에 의해 정의된 데이터베이스의 이름을 반환한다.
    HOST클라이언트가 실행 중인 장비의 이름을 반환한다.
    INSTANCE_NAME현재 인스턴스의 이름을 반환한다.
    INSTANCE현재 인스턴스의 식별번호를 반환한다.
    IP_ADDR[ESS]클라이언트의 IP 주소를 반환한다.
    LANG'LANGUAGE' 파라미터의 약어를 반환한다.
    LANGUAGE데이터베이스의 문자집합 이름을 반환한다.
    MODULEDBMS_APPLICATION_INFO.SET_MODULE 프러시저에 의해 정의된 모듈 이름을 반환한다.
    NETWORK_PROTOCOL양방향 통신을 위한 네트워크 프로토콜의 이름을 반환한다.
    OS_USER클라이언트 프로세스의 OS 사용자 이름을 반환한다.
    SCHEMA클라이언트의 접속 스키마 이름을 반환한다.
    SCHEMAID클라이언트의 접속 사용자 식별번호를 반환한다.
    SERVER_ADDRESS현재 인스턴스가 실행 중인 장비의 IP 주소를 반환한다.
    SERVER_HOST현재 인스턴스가 실행 중인 장비의 이름을 반환한다.
    SESSION_USER클라이언트의 접속 사용자 이름을 반환한다.
    SESSIONID세션 감시 식별번호를 반환한다.
    TERMINAL클라이언트의 OS 식별자를 반환한다.
    TID현재 세션 식별번호를 반환한다.

사용자 지정 문맥 네임스페이스는 CREATE CONTEXT DDL 구문을 사용하여 생성할 수 있다. 또한 이 SYS_CONTEXT 가 해당 네임스페이스의 각 파라미터에 따라 반환할 값은 DBMS_SESSION.SET_CONTEXT 프러시저를 통해 설정할 수 있다.

SYS_CONTEXT의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    namespace문맥 네임스페이스를 정의하는 값이다.
    param문맥 네임스페이스와 관련된 파라미터 이름이다.
  • 예제

    다음은 SYS_CONTEXT 함수를 사용하는 예이다.

    SQL> SELECT SYS_CONTEXT('USERENV', 'TID') "TID"
         FROM DUAL;
    
    TID
    ---
      1
    
    1 row selected.

    다음은 지정된 패키지를 통해 ctx0 네임스페이스의 attr0 파라미터 값이 설정되었을 경우 그 값을 SYS_CONTEXT 함수를 통해 출력하는 예이다.

    SQL> SELECT SYS_CONTEXT('ctx0', 'attr0') "ATTR0"
         FROM DUAL;
    
    ATTR0
    -----
     val0
    
    1 row selected.

TRUNC(date)는 date를 format에 명시된 단위로 버림한 결과를 반환하는 함수이다.

참고

TRUNC(date)함수의 format에 명시할 수 있는 형식 문자열은 ROUND(date) 함수와 동일하다.

TRUNC(date)의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    date날짜를 반환하는 임의의 연산식이다.
    format

    버림 단위를 명시하는 형식 문자열이다.

    format이 명시되지 않는다면 'DD' 형식 문자열을 이용하여 가장 가까운 날로 버림이 된다. format으로 'YEAR', 'MONTH', 'DAY' 등을 사용할 수 있다.

  • 예제

    다음은 TRUNC(date) 함수를 사용하는 예이다.

    SQL> SELECT TRUNC(TO_DATE('2005/06/22', 'YYYY/MM/DD'), 'YEAR') 
         FROM DUAL;
    
    TRUNC(TO_DATE('2005/06/22','YYYY/MM/DD'),'YEAR')                 
    -----------------------------------------------------------------
    2005-01-01
    
    1 row selected.
    
    SQL> SELECT TO_CHAR(TRUNC(TO_DATE(
           '1998/6/20', 'YYYY/MM/DD'), 'CC'), 'YYYY/MM/DD') 
         FROM DUAL;
    
    TO_CHAR(TRUNC(TO_DATE('1998/6/20','YYYY/MM/DD'),'CC'),'YYYY/MM/DD')
    -------------------------------------------------------------------
    1901/01/01
    
    1 row selected.
    
    SQL> SELECT TO_CHAR(TRUNC(TO_DATE('-3741/01/02', 'SYYYY/MM/DD'), 'CC'),
           'SYYYY/MM/DD') 
         FROM DUAL;
    
    TO_CHAR(TRUNC(TO_DATE('-3741/01/02','SYYYY/MM/DD'),'CC'),'SYYYY/MM/DD')
    -----------------------------------------------------------------------
    -3800/01/01
    
    1 row selected.
    
    SQL> SELECT TO_CHAR(TRUNC(TO_DATE(
           '2005/01/26 12:30:14', 'YYYY/MM/DD HH24:MI:SS'), 'DY'), 'YYYY/MM/DD') 
         FROM DUAL;
    
    TO_CHAR(TRUNC(TO_DATE('2005/01/2612:30:14','YYYY/MM/DDHH24:MI:SS'),'DY'),'YYYY/M
    --------------------------------------------------------------------------------
    2005/01/23
    
    1 row selected.
    
    SQL> SELECT TRUNC(TO_DATE(
           '2005/01/26 12:30:14', 'YYYY/MM/DD HH24:MI:SS')) 
         FROM DUAL;
    
    TRUNC(TO_DATE('2005/01/2612:30:14','YYYY/MM/DDHH24:MI:SS'))      
    -----------------------------------------------------------------
    2005-01-26
    
    1 row selected.

UPDATEXML은 XPath expression과 XMLType instance의 쌍으로 입력된 인자들로 XMLType_instance의 각 해당 xpath들을 value_expr의 value로 치환하는 함수이다. 실제 xml column 값이 바뀌지 않고, 바뀐 XMLType instance가 반환된다. 만약 해당 xpath에 해당하는 node가 존재하지 않으면 원래의 바뀌지 않은 xmltype instance가 반환된다.

UPDATEXML의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    XMLType_instanceXML 타입의 instance다.
    XPath_stringXpath expression으로 업데이트할 곳의 child node들이 업데이트된다.
    value_expr업데이트할 곳의 child node들이 값이다.
    namespace_stringXPath_string의 네임스페이스 정보를 나타낸다. VARCHAR 타입이어야 한다.
  • 예제

    다음은 UPDATEXML 함수를 사용하는 예이다.

    SQL> SELECT warehouse_name,
       EXTRACT(warehouse_spec, '/Warehouse/Docks') "Number of Docks"
       FROM warehouses WHERE warehouse_name = 'San Francisco';
    
    WAREHOUSE_NAME       Number of Docks
    -------------------- --------------------
    San Francisco        <Docks>1</Docks>
    
    SQL> UPDATE warehouses SET warehouse_spec =
       UPDATEXML(warehouse_spec, '/Warehouse/Docks/text()',4)
       WHERE warehouse_name = 'San Francisco';
    
    1 row updated.
    
    SQL>SELECT warehouse_name,
       EXTRACT(warehouse_spec, '/Warehouse/Docks') "Number of Docks"
       FROM warehouses WHERE warehouse_name = 'San Francisco';
    
    WAREHOUSE_NAME       Number of Docks
    -------------------- --------------------
    San Francisco        <Docks>4</Docks>

USERENV는 현재 세션의 정보를 보여주는 함수이다.

USERENV의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    str문자열을 반환하는 임의의 연산식이다.
  • 예제

    다음은 USERENV 함수를 사용하는 예이다.

    SQL> SELECT USERENV('TID') FROM DUAL;
    
    USERENV('TID')
    ----------------------------------------------------------------
    7
    
    1 row selected.

VAR_POP은 expr의 모분산을 반환한다. 모분산을 계산할 때 NULL 값은 무시된다. 이 함수는 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다. 이 함수를 공집합에 적용하면 NULL 값을 반환한다.

이 함수는 다음과 같은 계산식으로 계산을 수행한다.

(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)

VAR_POP의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 데이터 타입 또는 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 반환하는 임의의 연산식이다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 VAR_POP 함수를 사용하는 예이다.

    SQL> SELECT VAR_POP(AGE) FROM EMP_AGE;
     
    VAR_POP(AGE)
    ------------
            8.29
     
    1 row selected.
  • 분석 함수 예제

    다음은 VAR_POP 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, VAR_POP(SAL)
           OVER (PARTITION BY DEPTNO) AS VAR_POP
         FROM EMP;
    
        DEPTNO      EMPNO    VAR_POP
    ---------- ---------- ----------
            10       7934 2390555.56
            10       7839 2390555.56
            10       7782 2390555.56
            20       7566    1009500
            20       7788    1009500
            20       7876    1009500
            20       7902    1009500
            20       7369    1009500
            30       7654 372222.222
            30       7698 372222.222
            30       7521 372222.222
            30       7499 372222.222
            30       7844 372222.222
            30       7900 372222.222
    
    14 rows selected.

VAR_SAMP는 expr의 표본분산을 반환하는 함수이다. 표본분산을 계산할 때 NULL 값은 무시된다. 이 함수는 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다. 이 함수를 공집합에 적용하면 NULL 값을 반환한다.

이 함수는 다음과 같은 계산식으로 계산을 수행한다.

(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / (COUNT(expr) - 1)

VAR_SAMP의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 데이터 타입 또는 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 반환하는 임의의 연산식이다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 VAR_SAMP 함수를 사용하는 예이다.

    SQL> SELECT VAR_SAMP(AGE) FROM EMP_AGE;
     
    VAR_SAMP(AGE)
    -------------
    9.21111111111
     
    1 row selected.
  • 분석 함수 예제

    다음은 VAR_SAMP 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, VAR_SAMP(SAL)
           OVER (PARTITION BY DEPTNO) AS VAR_SAMP
         FROM EMP;
    
        DEPTNO      EMPNO   VAR_SAMP
    ---------- ---------- ----------
            10       7934 3585833.33
            10       7839 3585833.33
            10       7782 3585833.33
            20       7566    1261875
            20       7788    1261875
            20       7876    1261875
            20       7902    1261875
            20       7369    1261875
            30       7654 446666.667
            30       7698 446666.667
            30       7521 446666.667
            30       7499 446666.667
            30       7844 446666.667
            30       7900 446666.667
    
    14 rows selected.

VARIANCE는 expr의 분산을 반환한다. 분석 함수로도 사용할 수 있다. 이 함수는 파라미터의 수치 데이터 타입 또는 변환된 수치 데이터 타입을 반환한다. 이 함수를 공집합에 적용하면 NULL 값을 반환한다.

Tibero에서는 분산을 다음과 같이 계산한다.

VARIANCE의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    expr수치 데이터 타입 또는 수치 데이터 타입은 아니지만 묵시적으로 수치 데이터 타입으로 변환할 수 있는 데이터 타입을 반환하는 임의의 연산식이다.
    analytic_clauseOVER analytic_clause를 사용해 함수를 분석 함수로 수행할 수 있다. 자세한 내용은 “4.1.3. 분석 함수”analytic_clause를 참고한다.
  • 예제

    다음은 VARIANCE 함수를 사용하는 예이다.

    SQL> SELECT VARIANCE(AGE) FROM EMP_AGE;
     
    VARIANCE(AGE)
    -------------
    9.21111111111
     
    1 row selected.
  • 분석 함수 예제

    다음은 VARIANCE 함수를 분석 함수로 사용하는 예이다.

    SQL> SELECT DEPTNO, EMPNO, VARIANCE(SAL)
           OVER (PARTITION BY DEPTNO) AS VARIANCE
         FROM EMP;
    
        DEPTNO      EMPNO    VARIANCE
    ---------- ---------- -----------
            10       7934 3585833.333
            10       7839 3585833.333
            10       7782 3585833.333
            20       7566     1261875
            20       7788     1261875
            20       7876     1261875
            20       7902     1261875
            20       7369     1261875
            30       7654 446666.6667
            30       7698 446666.6667
            30       7521 446666.6667
            30       7499 446666.6667
            30       7844 446666.6667
            30       7900 446666.6667
    
    14 rows selected.

XMLELEMENT는 identifier로는 엘리먼트(Element)의 이름을 받고, 엘리먼트의 속성 집합을 옵션으로 받으며, 엘리먼트의 내용을 구성하는 파라미터를 받는 함수이다. 이 함수는 중첩된 구조를 가진 XML 문서를 생성하기 위해서 보통은 중첩되어 사용된다.

XMLELEMENT의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    • xmlelement

      구성요소설명
      identifier

      identifier의 값은 XML의 enclosing tag로 사용되기 때문에 반드시 제공되어야 한다. identifier의 크기는 4000자까지이며, 컬럼명 또는 컬럼에 대한 참조일 필요는 없지만 표현식 또는 NULL 값일 수도 없다.

      엘리먼트의 내용을 구성하는 개체는 XMLATTRIBUTES 예약어 이후에 명시한다.

      xml_attributes_clauseXML의 속성(attribute)을 표현하기 위한 문법이다. 엘리먼트의 값을 나타낸다.
      expr엘리먼트의 내용을 구성하는 연산식이다.
    • xml_attributes_clause

      구성요소설명
      exprexpr이 컬럼이면 AS 절을 생략할 수 있으며, Tibero는 컬럼명을 엘리먼트 이름으로 사용한다. expr이 NULL이면, 해당 value expression에 어떠한 속성도 생성되지 않는다. value expression은 XMLELEMENT의 expr을 의미한다.
      aliasAS 절을 이용하여 expr의 별칭을 명시할 때 c_alias의 크기는 최대 4000자이다.
  • 예제

    다음은 XMLELEMENT 함수를 사용하는 예이다.

    SQL> SELECT XMLELEMENT("DEPT", 
                XMLELEMENT("DNAME",DNAME),
                XMLELEMENT("LOCATION",LOC)) AS "DEPT"
         FROM DEPT;
     
    DEPT
    ---------------------------------------------------------------------
    <DEPT><DNAME>ACCOUNTING</DNAME><LOCATION>NEW YORK</LOCATION></DEPT>
    <DEPT><DNAME>RESEARCH</DNAME><LOCATION>DALLAS</LOCATION></DEPT>
    <DEPT><DNAME>SALES</DNAME><LOCATION>CHICAGO</LOCATION></DEPT>
    <DEPT><DNAME>OPERATIONS</DNAME><LOCATION>BOSTON</LOCATION></DEPT>
    
    4 rows selected.

XMLTABLE은 XML 문서에 XML Query를 질의한 결과를 테이블 형태로 반환하는 함수이다. 각 컬럼의 값은 XML Query의 결과 XML에서 XPath를 통해 설정하며, 타입 지정을 통해서 해당 데이터 타입으로 설정되어 반환된다. 단, 이 함수는 Linux IA64, HP PA-RISC, Windows, Solaris 환경에서 지원하지 않는다.

XMLTABLE의 세부 내용은 다음과 같다.

  • 문법

  • 구성요소

    구성요소설명
    xquery_strXML 문서에 질의할 XML Query이다. 최대 길이는 4000자로 제한된다.
    xmlnamespace_clause의 strXML Query를 질의할 특정 네임스페이스를 지정할 수 있다. 필요 없으면 생략할 수 있다.
    xml_passing_clause의 exprXML Query를 질의할 XML 문서이다.
    xmltable_column의 FOR ORDINALITY

    FOR ORDINALITY 구문은 column이 생성된 row numbers의 column이 되도록 지정한다. FOR ORDINALITY 절은 하나만 있어야 한다.

    NUMBER column으로 생성된다.

    xmltable_column의 datatype결과 컬럼의 데이터 타입을 명시한다.
    xmltable_column의 str결과 컬럼의 이름을 명시한다. 문자열이며 최대 4000자이다.
    xmltable_column의 expr해당 XPath에 값이 없을 경우 디폴트 값이다. 이 문법이 생략되면 NULL이 기본값이다.
  • 예제

    다음은 XMLTABLE 함수를 사용하는 예이다.

    SQL> SELECT warehouse_name warehouse,
                warehouse2."Water", warehouse2."Rail"
         FROM warehouses,
              XMLTABLE('/Warehouse'
                PASSING warehouses.warehouse_spec
                COLUMNS 
                  "Water" varchar2(6) PATH '/Warehouse/WaterAccess',
                  "Rail" varchar2(6) PATH '/Warehouse/RailAccess') 
           warehouse2;
     
    WAREHOUSE                           Water  Rail
    ----------------------------------- ------ ------
    Southlake, Texas                    Y      N
    San Francisco                       Y      N
    New Jersey                          N      N
    Seattle, Washington                 N      Y
    
    4 rows selected.