오라클 함수 모음

컴퓨터/DB : 2009. 1. 15. 21:35


1. 문자 함수
 1-1) CHR
 1-2) CONCAT 함수
 1-3) INITCAP 함수
 1-4) LOWER 함수
 1-5) LPAD 함수
 1-6) LTRIM 함수
 1-7) NLS_INITCAP 함수
 1-8) NLS_LOWER 함수
 1-9) NLSSORT 함수
 1-10) NLS_UPPER 함수
 1-11) REPLACE 함수
 1-12) RPAD 함수
 1-13) RTRIM 함수
 1-14) SOUNDEX 함수
 1-15) SUBSTR 함수
 1-16) TRANSLATE 함수
 1-17) TREAT 함수
 1-18) TRIM 함수
 1-19) UPPER 함수
 1-20) ASCII 함수
 1-21) INSTR 함수
 1-22) LENGTH 함수

2. 날짜 처리함수(datetime function)
 2-1) ADD_MONTHS 함수
 2-2) CURRENT_DATE 함수
 2-3) URRENT_TIMESTAMP 함수
 2-4) DBTIMEZONE 함수
 2-5) EXTRACT(datetime) 함수
 2-6) FROM_TZ 함수
 2-7) LAST_DAY 함수
 2-8) LOCALTIMESTAMP 함수 
 2-9) MONTHS_BETWEEN 함수
 2-10) NEW_TIME 함수
 2-11) NEXT_DAY 함수
 2-12) NUMTODSINTERVAL 함수
 2-13) NUMTOYMINTERVAL 함수
 2-14) ROUND(date) 함수
 2-15) SESSIONTIMEZONE 함수
 2-16) SYS_EXTRACT_UTC 함수
 2-17) SYSDATE 함수
 2-18) SYSTIMESTAMP 함수
 2-19) TO_DSINTERVAL 함수
 2-20) TO_TIMESTAMP 함수
 2-21) TO_TIMESTAMP_TZ 함수
 2-22) TO_YMINTERVAL 함수
 2-23) TRUNC(date) 함수
 2-24) TZ_OFFSET 함수

3.데이터 형 변환 함수(conversion function)
 3-1) ASCIISTR 함수
 3-2) BIN_TO_NUM 함수
 3-3) CAST 함수
 3-4) CHARTOROWID 함수
 3-5) COMPOSE 함수 
 3-6) CONVERT 함수
 3-7) HEXTORAW 함수
 3-8) NUMTODSINTERVAL 함수
 3-9) NUMTOYMINTERVAL 함수
 3-10) RAWTOHEX 함수
 3-11) RAWTONHEX 함수
 3-12) ROWIDTOCHAR 함수
 3-13) ROWIDTONCHAR 함수
 3-14) TO_CHAR(character) 함수
 3-15) TO_CLOB 함수
 3-16) TO_DSINTERVAL 함수
 3-17) TO_LOB 함수
 3-18) TO_MULTI_BYTE 함수
 3-19) TO_NCHAR(character) 함수
 3-20) TO_NCHAR(datetime) 함수
 3-21) TO_NCHAR(number) 함수
 3-22) TO_NCLOB 함수
 3-23) TO_NUMBER 함수
 3-24) TO_SINGLE_BYTE 함수
 3-25) TO_YMINTERVAL 함수
 3-26) TRANSLATE ... USING 함수
 3-27) UNISTR 함수

4. 기타함수(miscellaneous single row function)
 4-1) BFILENAME 함수
 4-2) COALESCE 함수
 4-3) DECODE 함수
 4-4) DEPTH 함수
 4-5) DUMP 함수
 4-6) EMPTY_BLOB 함수
 4-7) EMPTY_CLOB 함수
 4-8) EXISTSNODE 함수
 4-9) EXTRACT(XML) 함수
 4-10) EXTRACTVALUE 함수
 4-11) GREATEST 함수
 4-12) LEAST 함수
 4-13) NLS_CHARSET_DECL_LEN 함수
 4-14) NLS_CHARSET_ID 함수
 4-15) NLS_CHARSET_NAME 함수
 4-16) NULLIF 함수
 4-17) NVL2 함수
 4-18) PATH 함수
 4-19) SYS_CONNECT_BY_PATH 함수
 4-20) SYS_CONTEXT 함수
 4-21) SYS_DBURIGEN 함수
 4-22) SYS_EXTRACT_UTC 함수
 4-23) SYS_GUID 함수
 4-24) SYS_XMLAGG 함수
 4-25) SYS_XMLGEN 함수
 4-26) UID 함수
 4-27) USER 함수
 4-28) USERENV 함수
 4-29) VSIZE 함수
 4-30) XMLAGG 함수
 4-31) XMLCOLATTVAL 함수
 4-32) XMLCONCAT 함수
 4-33) XMLFOREST 함수
 4-34) XMLELEMENT 함수

5.그룹함수  Aggregate 함수
 5-1) AVG* 함수
 5-2) CORR* CORR* 함수
 5-3) COUNT* 함수
 5-4) COVAR_POP 함수
 5-5) COVAR_SAMP 함수
 5-6) CUME_DIST 함수
 5-7) DENSE_RANK 함수
 5-8) FIRST 함수
 5-9) GROUP_ID 함수
 5-10) Grouping 함수
 5-11) GROUPING_ID 함수
 5-12) LAST 함수
 5-13) MAX 함수
 5-14) MIN 함수
 5-15) PERCENTILE_CONT 함수
 5-16) PERCENTILE_DISC 함수
 5-17) PERCENT_RANK 함수
 5-18) RANK 함수
 5-19) REGR_(linear regression) function* 함수
 5-20) STDDEV 함수
 5-21) STDDEV_POP 함수
 5-22) STDDEV_SAMP 함수
 5-23) SUM 함수
 5-24) VAR_POP 함수
 5-25) VAR_SAMP 함수
 5-26) VARIANCE 함수
 5-27) Grouping sets 함수

6. Analytic 함수
 6-1) AVG* 함수
 6-2) CORR* CORR* 함수
 6-3) COUNT* 함수
 6-4) COVAR_SAMP 함수
 6-5) CUME_DIST 함수
 6-6) DENSE_RANK 함수
 6-7) FIRST 함수
 6-8) FIRST_VALUE 함수
 6-9) LAG 함수
 6-10) LAST_VALUE 함수
 6-11) LEAD 함수
 6-12) NTILE 함수
 6-13) RATIO_TO_REPORT 함수
 6-14) ROW_NUMBER 함수

7. 객체 참조 함수
 7-1) REF 타입

8. PseudoColumn을 의미하는 것
 8-1) ROWID 컬럼
 8-2) ROWNUM 컬럼
 
1-1) CHR 함수
--------------------------------------------------------------------------------
입력된 수의 바이너리 코드에 해당하는 문자를 반환한다.
【예제】
SQL> select chr(75)||chr(79)||chr(82)||chr(69)||chr(65)
   2    from dual;
CHR(7
-----
KOREA
SQL>
1-2) CONCAT 함수
--------------------------------------------------------------------------------
 입력되는 두 문자열을 연결하여 반환한다.
 입력되는 두 문자열의 타입이 다를 경우 다음과 같이 반환된다.
첫 번째 문자열 타입  두 번째 문자열 타입  반환되는 문자열 타입 CLOB  NCLOB  NCLOB NCLOB  NCHAR  NCLOB NCLOB  CHAR  NCLOB NCHAR  CLOB  NCLOB

【예제】
SQL> select concat('Republic of',' KOREA') from dual;
CONCAT('REPUBLICO
-----------------
Republic of KOREA
SQL>  

1-3) INITCAP 함수
--------------------------------------------------------------------------------
initcap('string‘) 함수는 입력 문자열 중에서
각 단어의 첫 글자를 대문자로 나머지는 소문자로 변환한 스트링을 반환한다
【예제】
SQL> select initcap('beautiful corea') from dual;
INITCAP('BEAUTI
---------------
Beautiful Corea
SQL>

1-4) LOWER 함수
--------------------------------------------------------------------------------
lower(string) 함수는 입력된 문자열을 소문자로 반환한다.
【예제】
SQL> select lower('Beautiful COREA') from dual;
LOWER('BEAUTIFU
---------------
beautiful corea
SQL>  

1-5) LPAD 함수
--------------------------------------------------------------------------------
lpad(char1,n,char2) 함수는
지정된 길이 n에서 문자 char1으로 채우고
남은 공간은 왼쪽부터 char2로 채워서 출력한다.
【형식】
lpad (char1, n [, char2] )
【예제】
SQL> select lpad ('Corea', 12, '*') from dual;
LPAD('COREA'
------------
*******Corea
SQL>

1-6) LTRIM 함수
--------------------------------------------------------------------------------
 LTRIM(문자열, 문자)함수는 문자열중
좌측으로부터 특정문자와 일치하는 문자를 제거하고 출력한다.
【형식】
ltrim(char [,set] )
【예제】
SQL> select LTRIM('xyxXxyLAST WORD','xy') from dual;
LTRIM('XYXXX
------------
XxyLAST WORD
SQL>
 
1-7) NLS_INITCAP 함수
--------------------------------------------------------------------------------
nls_initcap(‘string’) 함수는 입력 문자열 중에서
 각 단어의 첫 글자를 대문자로
           나머지는 소문자로 변환한 스트링을 반환한다.
 단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.
【형식】
nls_initcap ( char [,'nlsparam'] )
【예제】
SQL> select nls_initcap('beautiful corea', 'nls_sort=binary')
  2  from dual;
NLS_INITCAP('BE
---------------
Beautiful Corea
SQL> select nls_initcap('beautiful corea','nls_sort=XDutch')
  2  from dual;
NLS_INITCAP('BE
---------------
Beautiful Corea
SQL>

1-8) NLS_LOWER 함수
--------------------------------------------------------------------------------
nls_lower(‘string’) 함수는 입력 문자열을 모두 소문자로 변환한 스트링을 반환한다. 
 단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.
【형식】
nls_lower ( char [,'nlsparam'] )
【예제】
SQL> select nls_lower('CITTA''','nls_sort=XGerman') from dual;
NLS_LO
------
citta'
SQL>

1-9) NLSSORT 함수
--------------------------------------------------------------------------------
nlssort(‘string’) 함수는 입력 문자열을 소팅하여 스트링을 반환한다.
  단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.
【형식】
nlssort ( char [,'nlsparam'] )
【예제】
SQL> select * from emp
  2    order by nlssort(name, 'nls_sort=XDanish');
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1104 jijoe             220        100
      1103 kim               250        100
SQL>
 
1-10) NLS_UPPER 함수
--------------------------------------------------------------------------------
nls_upper(‘string’) 함수는 입력 문자열을 모두 소문자로 변환한 스트링을 반환한다.
  단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.
【형식】
nls_upper ( char [,'nlsparam'] )
【예제】
SQL> select nls_upper('gro?e') from dual;
NLS_U
-----
gro?e
SQL> select nls_upper('gro?e','nls_sort=XGerman')
  2  from dual;
NLS_UP
------
grosse
SQL>
 
1-11) REPLACE 함수
--------------------------------------------------------------------------------
이 함수는 문자열에서 지정한 문자를 다른 문자로 치환한다.
  치환될 문자를 지정하지 않으면 해당 문자를 삭제한다.
【형식】
replace (char, search_string [, replacement_string] )
【예제】
SQL> select replace('aaabb','a','b') from dual;
REPLA
-----
bbbbb
SQL> select replace('aaabb','a') from dual;
RE
--
bb
SQL>

1-12) RPAD 함수
--------------------------------------------------------------------------------
rpad(char1,n,char2) 함수는 지정된 길이 n에서 문자 char1으로 채우고
남은 공간은 오른쪽부터 char2로 채워서 출력한다.
【형식】
rpad (char1, n [, char2] )
【예제】
SQL> select rpad('Corea',12,'*') from dual;
RPAD('COREA'
------------
Corea*******
SQL>
 
1-13) RTRIM 함수
--------------------------------------------------------------------------------
 RTRIM(문자열, 문자)함수는 문자열중
 우측으로부터 특정문자와 일치하는 문자를 제거하고 출력한다.
【형식】
rtrim(char [,set] )
【예제】
SQL> select RTRIM('BROWINGyxXxy','xy') "RTRIM example" from dual;
RTRIM exam
----------
BROWINGyxX
SQL>

1-14) SOUNDEX 함수
--------------------------------------------------------------------------------
soundex(‘char’) 함수는 char과 같은 발음의 이름을 표현한다.
【예제】
SQL> select name from emp;
NAME
----------
Cho
Joe
kim
jijoe
SQL> select name from emp
  2  where soundex(name) = soundex('jo');
NAME
----------
Joe
SQL>
 
1-15) SUBSTR 함수
--------------------------------------------------------------------------------
substr(str,m,n) 함수는 문자열 str 중에서 특정 위치 m으로부터 특정 길이n 만큼의 문자를 출력한다.
  m이 0이나 1이면 문자열의 첫글자를 의미하고,
  n이 생략되면 문자열의 끝까지를 의미한다.
  m이 음수이면 뒤쪽으로부터의 위치를 의미한다.
 SUBSTRB는 character 대신 byte를 사용하고,
 SUBSTDC는 unicode를 사용하며,
 SUBSTR2는 UCS2 codepoint를 사용하고,
 SUBSTR4는 UCS4 codepoint를 사용한다.
【형식】
{SUBSTR|SUBSTRB|SUBSTRC|SUNBSTD2|SUBSTR4}
  ( string, position [,substring_length] )
【예제】
SQL> select substr('abcdesfg', 3,2) from dual;
SU
--
cd
SQL> select substr('abcdefg',3) from dual;
SUBST
-----
cdefg
SQL> select substr('abcdefg', -3,2) from dual; ☜ 뒤에서 3번째부터 2글자를 의미한다.
SU
--
ef
SQL>
 
1-16) TRANSLATE 함수
--------------------------------------------------------------------------------
TRANSLATE (‘char’,‘from_string’,‘to_string’) 함수는
 char 내에 포함된 문자중 from_string에 지정한 모든 각각의 문자를
                         to_string문자로 각각 변경한다.
【형식】
TRANSLATE ('char','from_string','to_string')
【예제】
SQL> select translate('ababccc','c','d') from dual;
TRANSLA
-------
ababddd
SQL> select translate('2KRW229',
  2  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  3  '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') from dual;
TRANSLA
-------
9XXX999
SQL> select translate('2KRW229',
  2  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')
  3  from dual;
TRAN
----
2229
SQL>
 
1-17) TREAT 함수
--------------------------------------------------------------------------------
TREAT 함수는 선언된 타입을 변경함으로써, 수퍼타입을 서브타입인 것처럼 처리할 수 있도록 한다.
【형식】
TREAT ( expr AS [ REF] [schema . ] type )
【예제】
SQL> select x.p.empno from person_table p;
select x.p.empno from person_table p
       *
ERROR at line 1:
ORA-00904: "X"."P"."EMPNO": invalid identifier
 
SQL> select treat(x.p as employee).empno empno,
  2               x.p.last_name last_name
  3   from person_table x;
 
     EMPNO LAST_NAME
---------- --------------------
           Seoul
      1234 Inchon
      5678 Arirang
 
SQL>
【예제】
SQL> select name, TREAT(VALUE(p) AS employee_t).salary salary
  2   FROM person p;
NAME                        SALARY
----------------------   ---------
Bob   
Joe                         100000
Tim                           1000
SQL>
 
1-18) TRIM 함수
--------------------------------------------------------------------------------
 이 함수는 LTRIM과 RTRIM 함수를 결합한 형태로
  문자값의 왼쪽 또는 오른쪽 부분에 정의한 문자를 절삭하여 출력한다.
LEADING은 LTRIM처럼 문자열 왼쪽의 문자를 지정하여 절삭하고,
 TRAILING은 RTRIM처럼 문자열 오른쪽 문자를 지정하여 절삭한다.
 BOTH는 왼쪽과 오른쪽 문자를 지정하여 절삭한다.
【형식】
TRIM ([{{{LEADING|TRAILING|BOTH} [trim_char] } | trim_char} FROM]
      trim_source )
【예제】
SQL> select trim (0 from 000123400) from dual;
TRIM
----
1234
SQL> select trim(trailing 'a' from 'abca') from dual;
TRI
---
abc
SQL> select trim(leading 'a' from 'abca') from dual;
TRI
---
bca
SQL> select trim(both 'a' from 'abca') from dual;
TR
--
bc
SQL>

1-19) UPPER 함수
--------------------------------------------------------------------------------
upper(string) 함수는 입력된 문자열을 대문자로 반환한다.
【예제】
SQL> select upper('Beautiful COREA') from dual;
UPPER('BEAUTIFU
---------------
BEAUTIFUL COREA
SQL>
 
1-20) ASCII 함수
--------------------------------------------------------------------------------
ASCII
ascii(‘char’) 함수는 주어진 char의 첫 글자의 아스키 값을 반환한다.
 char의 타입은 char, varchar2, nchar, nvarchar2중의 하나이어야 한다.
【예제】
SQL> select ascii('Korea') from dual;
ASCII('KOREA')
--------------
            75
SQL> select ascii('K') from dual;
ASCII('K')
----------
        75
SQL>
 
1-21) INSTR 함수
--------------------------------------------------------------------------------
이 함수는 문자 스트링 중에서
지정한 문자가 가장 처음 나타나는 위치를 숫자로 출력한다.
【형식】
{INSTR|INSTRB|INSTRC|INSTR2|INSTR4}
  ( string, substring [, position [,occurrence] ] )
【예제】
SQL> select instr('Corea','e') from dual;
INSTR('COREA','E')
------------------
                 4
SQL> select instr('corporate floor','or',3,2) from dual;
INSTR('CORPORATEFLOOR','OR',3,2)
--------------------------------
                              14
SQL> select instrb('corporate floor','or',5,2) from dual;
INSTRB('CORPORATEFLOOR','OR',5,2)
---------------------------------
                               14
SQL>

1-22) LENGTH 함수
--------------------------------------------------------------------------------
 LENGTH(char) 함수는 char의 길이를 반환한다.
LENGTHB는 character 대신 byte를 사용하고,
LENGTHC는 unicode를 사용하며,
LENGTH2는 UCS2 codepoint를 사용하고,
LENGTH4는 UCS4 codepoint를 사용한다.
【형식】
{LENGTH| LENGTHB| LENGTHC| LENGTH2| LENGTH4} (char)
【예제】
SQL> select length('Corea') from dual;
LENGTH('COREA')
---------------
              5
SQL> select lengthb('Corea') from dual;
LENGTHB('COREA')
----------------
               5
SQL>
 

2-1) ADD_MONTHS 함수
--------------------------------------------------------------------------------
ADD_MONTHS 
 ADD_MONTHS(d, n)는 날짜 d에 n 개월을 더한 일자를 반환한다.
【예제】
SQL> select current_date today, add_months(current_date,1) "next month"
  2  from dual;
TODAY     next mont
--------- ---------
29-JUL-04 29-AUG-04
SQL>
 
2-2) CURRENT_DATE 함수
--------------------------------------------------------------------------------

 이 함수는 현재 session의 날짜 정보를 반환한다.
【예제】
SQL> select current_date from dual;
CURRENT_D
---------
31-JUL-04
SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
--------------------------------------------------------------------------
+09:00
SQL> alter session set NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
Session altered.
SQL> select current_date from dual;
CURRENT_DATE
--------------------
31-JUL-2004 09:31:57
SQL> alter session set time_zone='-5:0';
Session altered.
SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
--------------------------------------------------------------------------
-05:00
SQL>
 
2-3) URRENT_TIMESTAMP 함수
--------------------------------------------------------------------------------
 이 함수는 현재 session의 날짜와 시간 정보를 반환한다.
 current_timestamp는 time zone까지 출력되지만,
 localtimestamp는 time zone은 출력되지 않는다.
【예제】
SQL> select current_timestamp, localtimestamp,
  2  current_date from dual;
CURRENT_TIMESTAMP
--------------------------------------------------------------------------
LOCALTIMESTAMP
--------------------------------------------------------------------------
CURRENT_D
---------
04-AUG-04 11.17.40.768776 AM +09:00
04-AUG-04 11.17.40.768776 AM
04-AUG-04
SQL>
 
2-4) DBTIMEZONE 함수
--------------------------------------------------------------------------------

데이터베이스 timezone을 반환한다.
【예제】
SQL> select dbtimezone from dual;
DBTIME
------
-07:00
SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
--------------------------------------------------------------------------
+09:00
SQL>
 
2-5) EXTRACT(datetime) 함수
--------------------------------------------------------------------------------
특정 날짜/시간 값이나 날짜 값을 가진 표현식으로부터
  원하는 날짜 영역을 추출하여 출력한다. 
【형식】
EXTRACT ({year|month|day|hour|minute|second|
         timezone_hour|timezone_minute|
         timezone_region|timezone_abbr}
 FROM {datetime_value_expr|interval_value_rxpr})
【예제】
SQL> select extract(year from date '2004-8-2') from dual;
EXTRACT(YEARFROMDATE'2004-8-2')
-------------------------------
                           2004
SQL>
 
2-6) FROM_TZ 함수
--------------------------------------------------------------------------------
이 함수는 timestamp 값을 timestamp with time zone 값으로 변환한다.
【형식】
FROM_TZ ( timestamp_value, time_zone_value)
【예제】
SQL> select from_tz(timestamp '2004-8-11 08:00:00','3:00') from dual;
FROM_TZ(TIMESTAMP'2004-8-1108:00:00','3:00')
--------------------------------------------------------------------------
11-AUG-04 08.00.00.000000000 AM +03:00
SQL>
 
2-7) LAST_DAY 함수
--------------------------------------------------------------------------------
 이 함수는 지정한 달의 마지막 날을 출력한다.
【형식】
LAST_DAY ( date )
【예제】
SQL> select sysdate, last_day(sysdate) "last day",
  2  last_day(sysdate)- sysdate "Days Left"
  3  from dual;
SYSDATE   last day   Days Left
--------- --------- ----------
04-AUG-04 31-AUG-04         27
SQL>
 
2-8) LOCALTIMESTAMP 함수
--------------------------------------------------------------------------------
이 함수는 timestamp의 현재 날짜와 시각을 출력한다.
 current_timestamp는 time zone까지 출력되지만,
 localtimestamp는 time zone은 출력되지 않는다.
【형식】
localtimestamp [(timestamp_precision)]
【예제】
SQL> select current_timestamp, localtimestamp,
  2  current_date from dual;
CURRENT_TIMESTAMP
--------------------------------------------------------------------------
LOCALTIMESTAMP
--------------------------------------------------------------------------
CURRENT_D
---------
04-AUG-04 11.17.40.768776 AM +09:00
04-AUG-04 11.17.40.768776 AM
04-AUG-04
SQL>
 
【예제】오류가 발생하는 이유를 잘 이해하자.
SQL> CREATE TABLE local_test(col1 TIMESTAMP WITH LOCAL TIME ZONE);
Table created.
SQL> INSERT INTO local_test VALUES
  2  (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF'));
(TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF'))
              *
ERROR at line 2:
ORA-01830: date format picture ends before converting entire input string
SQL> INSERT INTO local_test VALUES
  2  (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'));
1 row created.
SQL> select * from local_test;
COL1
--------------------------------------------------------------------------
04-AUG-04 11.33.58.183398 AM
SQL>
 

2-9) MONTHS_BETWEEN 함수
--------------------------------------------------------------------------------
 MONTHS_BETWEEN(date1,date2) 함수는 date1과 date로 나타내는
 날짜와 날짜 사이의 개월 수를 출력한다.
【예제】
SQL> select months_between
  2  (to_date('02-02-2004','MM-DD-YYYY'),
  3   to_date('01-01-2003','MM-DD-YYYY') ) "Months"
  4  FROM dual;
    Months
----------
13.0322581
SQL>
 
2-10) NEW_TIME 함수
--------------------------------------------------------------------------------
NEW_TIME(date,zone1,zone2) 함수는 date, zone1 시간대를 zone2 시간대로 출력한다.
여기서 사용되는 zone은 다음 중의 하나이다.
 AST,ADT : Atlantic Standard or Daylight Time
 BST,BDT : Bering Standard or Daylight Time
 CST,CDT : Central Standard or Daylight Time
 EST,EDT : Eastern Standard or Daylight Time
 GMT : Greenwich Mean Time
 HST,HDT : Alaska-Hawaii Standard or Daylight Time
 MST,MDT : Mountain Standard or Daylight Time
 NST : Newfoundland Standard Time
 PST,PDT : Pacific Standard or Daylight Time
 YST,YDT : Yukon Standard or Daylight Time
【예제】
SQL> alter session set nls_date_format =
  2  'DD-MON-YYYY HH24:MI:SS';
Session altered.
SQL> select NEW_TIME(TO_DATE(
  2  '11-10-04 01:23:33', 'MM-DD-YY HH24:MI:SS'),
  3  'AST', 'PST') FROM DUAL;
NEW_TIME(TO_DATE('11
--------------------
09-NOV-2004 21:23:33
SQL>
 

2-11) NEXT_DAY 함수
--------------------------------------------------------------------------------
NEXT_DAY(date,char) 함수는 date로부터 char로 명시한 가장 최근의 날짜를 출력한다.
【예제】
SQL> select next_day('02-AUG-2004','MONDAY') from dual;
NEXT_DAY('02-AUG-200
--------------------
09-AUG-2004 00:00:00
SQL>
 

2-12) NUMTODSINTERVAL 함수
--------------------------------------------------------------------------------
 NUMTODSINTERVAL(n,'char_expr') 함수는 n을 interval day to second로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘DAY’
  ‘HOUR’
  ‘MINUTE’
  ‘SECOND’
【예제】
SQL> select numtodsinterval(100,'MINUTE') from dual;
NUMTODSINTERVAL(100,'MINUTE')
--------------------------------------------------------------------------
+000000000 01:40:00.000000000
SQL>
【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename, hiredate,
  2  numtodsinterval(100,'day')+hiredate from emp;
ENAME      HIREDATE  NUMTODSIN
---------- --------- ---------
SMITH      17-DEC-80 27-MAR-81
ALLEN      20-FEB-81 31-MAY-81
WARD       22-FEB-81 02-JUN-81
JONES      02-APR-81 11-JUL-81
MARTIN     28-SEP-81 06-JAN-82
BLAKE      01-MAY-81 09-AUG-81
CLARK      09-JUN-81 17-SEP-81
SCOTT      19-APR-87 28-JUL-87
KING       17-NOV-81 25-FEB-82
TURNER     08-SEP-81 17-DEC-81
ADAMS      23-MAY-87 31-AUG-87
JAMES      03-DEC-81 13-MAR-82
FORD       03-DEC-81 13-MAR-82
MILLER     23-JAN-82 03-MAY-82
14 rows selected.
SQL>
 
2-13) NUMTOYMINTERVAL 함수
--------------------------------------------------------------------------------
NUMTOYMINTERVAL(n,'char_expr') 함수는 n을 interval year to month로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘YEAR’
  ‘MONTH’ 
【예제】
SQL> select numtoyminterval(30,'month') from dual;
NUMTOYMINTERVAL(30,'MONTH')
---------------------------------------------------------------------------
+000000002-06
SQL>
【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename,hiredate,
  2  numtoyminterval(30,'month')+hiredate from emp;
ENAME      HIREDATE  NUMTOYMIN
---------- --------- ---------
SMITH      17-DEC-80 17-JUN-83
ALLEN      20-FEB-81 20-AUG-83
WARD       22-FEB-81 22-AUG-83
JONES      02-APR-81 02-OCT-83
MARTIN     28-SEP-81 28-MAR-84
BLAKE      01-MAY-81 01-NOV-83
CLARK      09-JUN-81 09-DEC-83
SCOTT      19-APR-87 19-OCT-89
KING       17-NOV-81 17-MAY-84
TURNER     08-SEP-81 08-MAR-84
ADAMS      23-MAY-87 23-NOV-89
JAMES      03-DEC-81 03-JUN-84
FORD       03-DEC-81 03-JUN-84
MILLER     23-JAN-82 23-JUL-84
14 rows selected.
SQL>
 

2-14) ROUND(date) 함수
--------------------------------------------------------------------------------
이 함수는 날짜를 주어진 형식으로 반올림하는 함수이다.
 날짜 형식이 없으면 가장 가까운 날을 출력한다.
【형식】
ROUND( date [,fmt] )
【예제】
SQL> select localtimestamp, round(sysdate,'year') from dual;
LOCALTIMESTAMP
--------------------------------------------------------------------------
ROUND(SYS
---------
04-AUG-04 01.26.24.197977 PM
01-JAN-05
SQL> select localtimestamp,round(sysdate,'day') from dual;
LOCALTIMESTAMP
--------------------------------------------------------------------------
ROUND(SYS
---------
04-AUG-04 01.29.57.839269 PM
08-AUG-04
SQL> select localtimestamp,round(sysdate) from dual;
LOCALTIMESTAMP
--------------------------------------------------------------------------
ROUND(SYS
---------
04-AUG-04 01.30.11.552050 PM
05-AUG-04
SQL>
 
2-15) SESSIONTIMEZONE 함수
--------------------------------------------------------------------------------
이 함수는 현재 세션의 시간대역을 출력한다.
【예제】
SQL> select sessiontimezone, current_timestamp from dual;
SESSIONTIMEZONE
--------------------------------------------------------------------------
CURRENT_TIMESTAMP
--------------------------------------------------------------------------
+09:00
04-AUG-04 01.37.13.355873 PM +09:00
SQL> select sessiontimezone, tz_offset(sessiontimezone) from dual;
SESSIONTIMEZONE
--------------------------------------------------------------------------
TZ_OFFS
-------
+09:00
+09:00
SQL>
 
2-16) SYS_EXTRACT_UTC 함수
--------------------------------------------------------------------------------
sys_extract_utc(datetime_with_timezone) 함수는
UTC(coordinated universal time: Greenwich mean time) 시각을 반환한다. 
【예제】
SQL> select systimestamp, sys_extract_utc(systimestamp) from dual;
SYSTIMESTAMP
--------------------------------------------------------------------------
SYS_EXTRACT_UTC(SYSTIMESTAMP)
--------------------------------------------------------------------------
06-AUG-04 02.41.39.258976 PM +09:00
06-AUG-04 05.41.39.258976 AM

SQL>
 
2-17) SYSDATE 함수
--------------------------------------------------------------------------------
이 함수는 오늘 현재 날짜와 시각을 출력한다.
【예제】
SQL> select sysdate, current_timestamp from dual;
SYSDATE
---------
CURRENT_TIMESTAMP
--------------------------------------------------------------------------
04-AUG-04
04-AUG-04 01.51.39.767156 PM +09:00
SQL> select to_char
  2  (sysdate, 'MM-DD-YYYY HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,'MM
-------------------
08-04-2004 13:53:18
SQL>
 
2-18) SYSTIMESTAMP 함수
--------------------------------------------------------------------------------
이 함수는 시스템의 날짜를 출력한다.
【예제】
SQL> select sysdate,systimestamp,localtimestamp from dual;
SYSDATE
---------
SYSTIMESTAMP
--------------------------------------------------------------------------
LOCALTIMESTAMP
--------------------------------------------------------------------------
04-AUG-04
04-AUG-04 01.58.06.346528 PM +09:00
04-AUG-04 01.58.06.346552 PM
SQL>
 
2-19) TO_DSINTERVAL 함수
--------------------------------------------------------------------------------
이 함수는 문자열을 interval day to second 형식으로 변환하는 함수이다.
【형식】
to_dsinterval ( char [ ‘nlsparam’] )
【예제】
SQL> select sysdate,
  2  sysdate+to_dsinterval('003 17:00:00') as "3days 17hours later"
  3  from dual;
SYSDATE   3days 17h
--------- ---------
04-AUG-04 08-AUG-04
SQL>
 
2-20) TO_TIMESTAMP 함수
--------------------------------------------------------------------------------
이 함수는 문자열을 timestamp 형식으로 변환하여 출력한다 
【형식】
to_timestamp ( char [,fmt ['nlsparam'] ] )
【예제】
SQL> select to_timestamp('2004-8-20 1:30:00', 'YYYY-MM-DD HH:MI:SS')
  2  from dual;
TO_TIMESTAMP('2004-8-201:30:00','YYYY-MM-DDHH:MI:SS')
--------------------------------------------------------------------------
20-AUG-04 01.30.00.000000000 AM
SQL>
 

2-21) TO_TIMESTAMP_TZ 함수
--------------------------------------------------------------------------------
이 함수는 문자열을 timestamp with time zone 형식으로 변환하여 출력한다. 
【형식】
to_timestamp_tz ( char [,fmt ['nlsparam'] ] )
【예제】
SQL> select to_timestamp_tz('2004-8-20 1:30:00 -3:00',
  2  'YYYY-MM-DD HH:MI:SS TZH:TZM') from dual;
TO_TIMESTAMP_TZ('2004-8-201:30:00-3:00','YYYY-MM-DDHH:MI:SSTZH:TZM')
--------------------------------------------------------------------------
20-AUG-04 01.30.00.000000000 AM -03:00
SQL>
 
2-22) TO_YMINTERVAL 함수
--------------------------------------------------------------------------------
TO_YMINTERVAL ( char ) 함수는 문자열을 interval year to month 형식으로 변환하는 함수이다.
【예제】
SQL> select sysdate,
  2  sysdate+to_yminterval('01-03') "15Months later"
  3  from dual;
SYSDATE   15Months
--------- ---------
04-AUG-04 04-NOV-05
SQL>
 
2-23) TRUNC(date) 함수
--------------------------------------------------------------------------------
이 함수는 날짜를 절삭하여 출력한다.
【형식】
TRUNC ( date [.fmt] )
【예제】
SQL> select trunc(to_date('27-AUG-04','DD-MON-YY'), 'YEAR')
  2  from dual;
TRUNC(TO_
---------
01-JAN-04
SQL>
 
2-24) TZ_OFFSET 함수
--------------------------------------------------------------------------------
이 함수는 time zone의 offset 값을 출력한다.
【형식】
TZ_OFFSET ( {‘time_zone_name’ | SESSIONTIMEZONE | DBTIMEZONE |
             ‘{+|-} hh:mi’ } )
【예제】
SQL> select sessiontimezone, tz_offset('ROK') from dual;
SESSIONTIMEZONE
---------------------------------------------------------------------------
TZ_OFFS
-------
+09:00
+09:00
SQL>
 

3-1) ASCIISTR 함수
--------------------------------------------------------------------------------
 asciistr('string')의 string의 아스키 문자로 반환한다.
Ä
【예제】
SQL> select ascii('ABÄCDE') from dual;
☜ ABÄCDE의 두번째 Ä는 A에 움라우트(Umlaut)가 붙은 글씨이다.
ASCIIS
------
ABDCDE
           
SQL>
 

3-2) BIN_TO_NUM 함수
--------------------------------------------------------------------------------
 이 함수는 2진수 벡터를 10진수로 변환한다.
SQL> select bin_to_num(1,0,1,0) from dual;
BIN_TO_NUM(1,0,1,0)
-------------------
                 10
SQL>
 
3-3) CAST 함수
--------------------------------------------------------------------------------
 데이터형식이나 collection 형식을 다른 데이터형식이나 다른 collection 형식으로 변환한다.
【예제】데이터형식인 경우
SQL> select current_date from dual;
CURRENT_D
---------
30-JUL-04
SQL> select cast(current_date as timestamp) from dual;
CAST(CURRENT_DATEASTIMESTAMP)
---------------------------------------------------------------------------
30-JUL-04 12.29.15.000000 PM
SQL>
 
3-4) CHARTOROWID 함수
--------------------------------------------------------------------------------
 이 함수는 char, varchar2, nchar, ncharvar2형 데이터 타입을 rowid 형 데이터 타입으로 변경한다.
【예제】
SQL> select name from emp
  2  where rowid = chartorowid('AAAHZ+AABAAAMWiAAF');
NAME
----------
jijoe
SQL> select rowid,name from emp;
ROWID              NAME
------------------ ----------
AAAHZ+AABAAAMWiAAA Cho
AAAHZ+AABAAAMWiAAB Joe
AAAHZ+AABAAAMWiAAC kim
AAAHZ+AABAAAMWiAAF jijoe
SQL>

여기서 rowid의 의미는 다음과 같다.
AAAHZ+  AAB  AAAMWi  AAA 객체번호  테이블스페이스번호  블록번호  행번호
 

3-5) COMPOSE 함수
--------------------------------------------------------------------------------
 입력된 스트링을 unicode로 나타낸다.
【예제】
SQL> select compose('aa' || unistr('308') ) from dual;
CO
--
aa
SQL>
 
3-6) CONVERT 함수
--------------------------------------------------------------------------------
입력된 문자열을 지정한 코드로 변환한다.
공용 문자셋은 살펴보자.
US7ASCII  US 7-bit ASCII 문자 WE8DEC  서유럽 8비트 문자 WE8HP  HP 서유럽 레이져젯 8비트 문자 F7DEC  DEC 프랑스 7비트 문자 WE8EBCDIC500  IBM 서유럽 EBCDIC 코드 페이지 500 WE8PC850  IBM PC 코드 페이지 850 WE8ISO8859P1  ISO 8859 서유럽 8비트 문자
【예제】
SQL> select convert('arirang','we8pc850') from dual;
CONVERT
-------
arirang
SQL>
 
3-7) HEXTORAW 함수
--------------------------------------------------------------------------------
HEXTORAW(char) 함수는 char, varchar2, nchar, nvarchar2 따위의 문자로 주어지는
 hexadecimal digit을 raw 값으로 변환한다.
【예제】
SQL> create table test(raw_col RAW(10));
Table created.
SQL> insert into test VALUES (HEXTORAW('7D'));
1 row created.
SQL> select * from test;
RAW_COL
--------------------
7D
SQL>
 

3-8) NUMTODSINTERVAL 함수
--------------------------------------------------------------------------------
 NUMTODSINTERVAL(n,'char_expr') 함수는 n을 interval day to second로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘DAY’
  ‘HOUR’
  ‘MINUTE’
  ‘SECOND’
【예제】
SQL> select numtodsinterval(100,'MINUTE') from dual;
NUMTODSINTERVAL(100,'MINUTE')
--------------------------------------------------------------------------
+000000000 01:40:00.000000000
SQL>
【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename, hiredate,
  2  numtodsinterval(100,'day')+hiredate from emp;
ENAME      HIREDATE  NUMTODSIN
---------- --------- ---------
SMITH      17-DEC-80 27-MAR-81
ALLEN      20-FEB-81 31-MAY-81
WARD       22-FEB-81 02-JUN-81
JONES      02-APR-81 11-JUL-81
MARTIN     28-SEP-81 06-JAN-82
BLAKE      01-MAY-81 09-AUG-81
CLARK      09-JUN-81 17-SEP-81
SCOTT      19-APR-87 28-JUL-87
KING       17-NOV-81 25-FEB-82
TURNER     08-SEP-81 17-DEC-81
ADAMS      23-MAY-87 31-AUG-87
JAMES      03-DEC-81 13-MAR-82
FORD       03-DEC-81 13-MAR-82
MILLER     23-JAN-82 03-MAY-82
14 rows selected.
SQL>
 

3-9) NUMTOYMINTERVAL 함수
--------------------------------------------------------------------------------
NUMTOYMINTERVAL(n,'char_expr') 함수는 n을 interval year to month로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘YEAR’
  ‘MONTH’ 
【예제】
SQL> select numtoyminterval(30,'month') from dual;
NUMTOYMINTERVAL(30,'MONTH')
---------------------------------------------------------------------------
+000000002-06
SQL>
【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename,hiredate,
  2  numtoyminterval(30,'month')+hiredate from emp;
ENAME      HIREDATE  NUMTOYMIN
---------- --------- ---------
SMITH      17-DEC-80 17-JUN-83
ALLEN      20-FEB-81 20-AUG-83
WARD       22-FEB-81 22-AUG-83
JONES      02-APR-81 02-OCT-83
MARTIN     28-SEP-81 28-MAR-84
BLAKE      01-MAY-81 01-NOV-83
CLARK      09-JUN-81 09-DEC-83
SCOTT      19-APR-87 19-OCT-89
KING       17-NOV-81 17-MAY-84
TURNER     08-SEP-81 08-MAR-84
ADAMS      23-MAY-87 23-NOV-89
JAMES      03-DEC-81 03-JUN-84
FORD       03-DEC-81 03-JUN-84
MILLER     23-JAN-82 23-JUL-84
14 rows selected.
SQL>
 
 

3-10) RAWTOHEX 함수
--------------------------------------------------------------------------------
RAWTOHEX(raw) 함수는 raw 값을 hexadecimal 값으로 변환한다.
【예제】
SQL> create table test(raw_col RAW(10));
Table created.
SQL> insert into test VALUES (HEXTORAW('7D'));
1 row created.
SQL> select * from test;
RAW_COL
--------------------
7D
SQL> select rawtohex(raw_col) from test;
RAWTOHEX(RAW_COL)
--------------------
7D
SQL>
 
3-11) RAWTONHEX 함수
--------------------------------------------------------------------------------
RAWTONHEX(raw) 함수는 raw 값을 nvarchar2형 hexadecimal 값으로 변환한다.
【예제】
SQL> create table test(raw_col RAW(10));
Table created.
SQL> insert into test VALUES (HEXTORAW('7D'));
1 row created.
SQL> select * from test;
RAW_COL
--------------------
7D
SQL> select rawtonhex(raw_col) from test;
RAWTONHEX(RAW_COL)
--------------------
7D
SQL>
 
3-12) ROWIDTOCHAR 함수
--------------------------------------------------------------------------------
RAWIDTOCHAR(rowid) 함수는 rowid 값을 varchar2 형식의 데이터로 변환한다.
【예제】
SQL> select rowid from test;
ROWID
------------------
AAAHbHAABAAAMXCAAA
SQL> select rowid from test
  2  where rowidtochar(rowid) like '%AABAA%';
ROWID
------------------
AAAHbHAABAAAMXCAAA
SQL>
여기서 rowid의 의미는 다음과 같다.
AAAHbH  AAB  AAAMXC  AAA 객체번호  테이블스페이스번호  블록번호  행번호
 

3-13) ROWIDTONCHAR 함수
--------------------------------------------------------------------------------
RAWIDTONCHAR(rowid) 함수는 rowid 값을 nvarchar2 형식의 데이터로 변환한다.
【예제】
SQL> select rowid from test;
ROWID
------------------
AAAHbHAABAAAMXCAAA
SQL> select rowid from test
  2  where rowidtochar(rowid) like '%AABAA%';
ROWID
------------------
AAAHbHAABAAAMXCAAA
SQL> select lengthb(rowidtonchar(rowid)), rowidtonchar(rowid)
  2  from test;
LENGTHB(ROWIDTONCHAR(ROWID)) ROWIDTONCHAR(ROWID
---------------------------- ------------------
                          36 AAAHbHAABAAAMXCAAA
SQL>

여기서 rowid의 의미는 다음과 같다.
AAAHbH  AAB  AAAMXC  AAA 객체번호  테이블스페이스번호  블록번호  행번호
 

3-14) TO_CHAR(character) 함수
--------------------------------------------------------------------------------
 이 함수는 nchar, nvarchar2, clob, nclob 형식의 데이터를
데이터베이스 character set으로 변환한다. 즉, 문자로 변환한다.
【형식】
 TO_CHAR( nchar| clob | nclob)
【예제】
SQL> select to_char('01110') from dual;
TO_CH
-----
01110
SQL>
 

3-15) TO_CLOB 함수
--------------------------------------------------------------------------------
이 함수는 LOB 컬럼에 있는 NCLOB나 또는 다른 문자 스트링을 CLOB로 변환한다.
【형식】
 TO_CLOBR({ lob_column | char})
【예제】
SQL> select to_clob('corea') from dual;
TO_CLOB('COREA')
--------------------------------------------------------------------------
corea
SQL>
 

3-16) TO_DSINTERVAL 함수
--------------------------------------------------------------------------------
이 함수는 문자열을 interval day to second 형식으로 변환하는 함수이다.
【형식】
to_dsinterval ( char [ ‘nlsparam’] )
【예제】
SQL> select sysdate,
  2  sysdate+to_dsinterval('003 17:00:00') as "3days 17hours later"
  3  from dual;
SYSDATE   3days 17h
--------- ---------
04-AUG-04 08-AUG-04
SQL>
 
3-17) TO_LOB 함수
--------------------------------------------------------------------------------
 TO_LOB(long_column) 함수는 LONG, LONG RAW 컬럼의 데이터를 LOB 값으로 변환한다.
【예제】
SQL> create table test2(zz clob);
Table created.
SQL> insert into test2
  2  (select to_lob(p.raw_col) from test p);
SQL>
 
3-18) TO_MULTI_BYTE 함수
--------------------------------------------------------------------------------
TO_MULTI_BYTE(char) 함수는 싱글 바이트 문자를 포함한 모든 문자열을 다중바이트 문자열로 변환한다.
【예제】
SQL> select dump(to_multi_byte('Corea')) from dual;
DUMP(TO_MULTI_BYTE('COREA'))
-----------------------------------------------------
Typ=1 Len=10: 163,195,163,239,163,242,163,229,163,225
SQL>
 

3-19) TO_NCHAR(character) 함수
--------------------------------------------------------------------------------
 이 함수는 문자스트링, clob, nclob 형식의 데이터를 national character set,
 즉 nchar으로 변환한다. 이는 translate ... using 문의 경우와 같다.
【형식】
TO_NCHAR({char|clob|nclob} [,fmt [,'nlsparam']])
【예제】
SQL> select to_nchar('Corea') from dual;
TO_NC
-----
Corea
SQL>
 
3-20) TO_NCHAR(datetime) 함수
--------------------------------------------------------------------------------
 이 함수는 date, timestamp, timestamp with time zone, timestamp with local time zone,
 interval month to year, interval day to second 형식의 데이터를
 nchar 형식의 데이터로 변환한다.
【형식】
TO_NCHAR({datetime|interval} [,fmt [,'nlsparam']])
【예제】
SQL> select to_nchar(sysdate) from dual;
TO_NCHAR(SYSDATE)
------------------------------
05-AUG-04
SQL>
 

3-21) TO_NCHAR(number) 함수
--------------------------------------------------------------------------------
 이 함수는 숫자를 nvarchar2 형식의 데이터로 변환한다.
【형식】
TO_NCHAR(n [,fmt [,'nlsparam']])
【예제】
SQL> select to_nchar(1234) from dual;
TO_N
----
1234
SQL> select to_nchar(rownum) from test;
TO_NCHAR(ROWNUM)
----------------------------------------
1
SQL>
 

3-22) TO_NCLOB 함수
--------------------------------------------------------------------------------
이 함수는 clob, 문자열 형식의 데이터를 nclob 형식의 데이터로 변환한다.
【형식】
TO_NCLOB({char|lob_column})
【예제】
SQL> select to_nclob('Corea') from dual;
TO_NCLOB('COREA')
--------------------------------------------------------------------------
Corea
SQL>
 

3-23) TO_NUMBER 함수
--------------------------------------------------------------------------------
이 함수는 숫자를 포함하는 char, varchar2, nchar, nvarchar2 형식의
 문자 데이터를 number 형식의 숫자 데이터로 변환한다.
【형식】
TO_NUMBER(char [,fmt [,'nlsparam']])
【예제】
SQL> select to_number('1234') from dual;
TO_NUMBER('1234')
-----------------
             1234
SQL>
 
3-24) TO_SINGLE_BYTE 함수
--------------------------------------------------------------------------------
TO_SINGLE_BYTE(char) 함수는 다중 바이트 문자열을 single byte 문자로 변환한다.
【예제】
SQL> select dump(to_multi_byte('Corea')) from dual;
DUMP(TO_MULTI_BYTE('COREA'))
-----------------------------------------------------
Typ=1 Len=10: 163,195,163,239,163,242,163,229,163,225
SQL> select dump(to_single_byte('Corea')) from dual;
DUMP(TO_SINGLE_BYTE('COREA'))
------------------------------
Typ=1 Len=5: 67,111,114,101,97
SQL> select to_single_byte(chr(65)) from dual;
T
-
A
SQL>
 

3-25) TO_YMINTERVAL 함수
--------------------------------------------------------------------------------
TO_YMINTERVAL ( char ) 함수는 문자열을 interval year to month 형식으로 변환하는 함수이다.
【예제】
SQL> select sysdate,
  2  sysdate+to_yminterval('01-03') "15Months later"
  3  from dual;
SYSDATE   15Months
--------- ---------
04-AUG-04 04-NOV-05
SQL>
 
3-26) TRANSLATE ... USING 함수
--------------------------------------------------------------------------------
이 함수는 텍스트 형식의 데이터를 지정한 문자 형식의 데이터로 변환한다.
【형식】
TRANSLATE ( text USING {CHAR_CS|NCHAR_CS} )
【예제】
SQL> select translate('Corea' USING char_cs) from dual;
TRANS
-----
Corea
SQL> select to_nchar('Corea') from dual;
TO_NC
-----
Corea
SQL>
 
3-27) UNISTR 함수
--------------------------------------------------------------------------------
UNISTR('string') 함수는 스트링 형식의 데이터를 nchar 형식의 데이터로 변환한다.
【예제】
SQL> select unistr('abc0e50f10f6') from dual;
UNISTR
------
abc??o
SQL> select unistr('Corea') from dual;
UNIST
-----
Corea
SQL>
 

4-1) BFILENAME 함수
--------------------------------------------------------------------------------
 서버 파일 시스템 상에 실제로 위치한 LOB 바이너리 파일의 위치한 BFILE locator를 반환한다.
【형식】
bfilename ('디렉토리‘,’파일이름‘)
【예제】BFILE을 insert하는 예
SQL> connect system/manager
SQL> host mkdir /export/home/oracle/bfile
SQL> create directory bfile_dir as '/export/home/oracle/bfile';
Directory created.
SQL> grant read on directory bfile_dir to jijoe;
Grant succeeded.
SQL> connect jijoe/joe_password
SQL> create table bfile_doc (id number, doc bfile);
SQL> insert into bfile_doc
   1    values(1111,bfilename('bfile_dir','unix.hwp'));
1 row created.
SQL>
 
4-2) COALESCE 함수
--------------------------------------------------------------------------------
이 함수는 나열된 값 중에서 NULL이 아닌 첫 번째 값을 반환한다.  
【예제】
SQL> select coalesce('','','arirang','kunsan') from dual;
COALESC
-------
arirang
SQL>
 

4-3) DECODE 함수
--------------------------------------------------------------------------------
DECODE는 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL 안으로 끌어들여 사용하기 위하여 만들어진 오라클 함수이다.
따라서 일반 프로그래밍 언어의 IF문이 수행 할 수 있는 기능을 포함하고 있다.
  select시의 decode 사용은 from 절만 빼고 어디에서나 사용할 수 있다.
  일반 프로그래밍과 decode 함수를 서로 비교하여 보자.
IF문 Decode 함수 IF A=B THEN RETURN 'T';END IF; DECODE(A,B,'T') IF A=B THENRETURN 'T';ELSIF A=C THENRETURN 'F';ELSERETURN 'X';END IF; DECODE(A,B,'T',C,'F','X')
【형식】
DECODE(검색컬럼,조건1,결과값1,
                  조건2,결과값2,...,기본값);
【예제】
SQL> connect jijoe/jijoe_password
SQL> create table aa(
  2  pid        number(12) primary key,
  3  addr varchar2(20),
  4  name varchar2(10));
SQL> insert into aa values(1234,'kunsan','jijoe')
SQL> insert into aa values(3456,'seoul','sunny')
SQL> select * from aa;
       PID ADDR                 NAME
---------- -------------------- ----------
      1234 kunsan               jijoe
      3456 seoul                sunny
SQL> select decode(pid,1234,name) name from aa;
NAME
----------
jijoe

SQL>
【예제】
SQL> desc ddd
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NO                                                 NUMBER(4)
 NAME                                               VARCHAR2(10)
 HIRDATE                                            DATE
 DEPTNO                                             NUMBER(5)
SQL> select * from ddd;
        NO NAME       HIRDATE       DEPTNO
---------- ---------- --------- ----------
         1 student1   01-JAN-04         10
         2 student2   01-FEB-04         10
         3 student3   01-MAR-04         20
         4 student4   01-MAY-04         30
SQL> select count(decode(to_char(hirdate,'MM'),'01',1)) "JAN",
  2         count(decode(to_char(hirdate,'MM'),'02',1)) "FEB",
  3         count(decode(to_char(hirdate,'MM'),'03',1)) "MAR",
  4         count(*) "Total"
  5  from ddd
  6  where to_char(hirdate,'MM') >= '01' AND
  7        to_char(hirdate,'MM') <= '06';
       JAN        FEB        MAR      Total
---------- ---------- ---------- ----------
         1          1          1          4
SQL>
 

4-4) DEPTH 함수
--------------------------------------------------------------------------------
DEPTH( correlation_integer) 함수는 UNDER_PATH나 EQUALS_PATH 조건과 함께 사용되는 보조함수이다.
 이 함수는 UNDER_PATH 조건에 상관관계의 수치를 반환한다.
【예제】
SQL> select * from resource_view;
SQL> select path(1), depth(2)
  2  from resource_view
  3  where under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 1)=1
  4    and under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 2)=1;
PATH(1)                                      DEPTH(2)
------------------------------------------ ----------
/xml.xsd                                            1
        
SQL>
 
4-5) DUMP 함수
--------------------------------------------------------------------------------
지정한 데이터의 위치와 길이 따위를 지정한 형식으로 반환한다.
【형식】
DUMP(expr [,반환형식[,시작위치[,길이]]] )
【예제】
SQL> select dump('Corea', 1016) from dual;
DUMP('COREA',1016)
-----------------------------------------------------
Typ=96 Len=5 CharacterSet=KO16KSC5601: 43,6f,72,65,61
SQL> select dump('Corea', 8,3,2) "Octal" from dual;
Octal
---------------------
Typ=96 Len=5: 162,145
SQL> select dump('Corea',16,3,2) "ASCII" from dual;
ASCII
-------------------
Typ=96 Len=5: 72,65
SQL>
 
4-6) EMPTY_BLOB 함수
--------------------------------------------------------------------------------
EMPTY_BLOB () 함수는 LOB 변수를 초기화하기 위하여 쓰이거나,
 또는 INSERT 문이나 UPDATE 문에서 empty LOB 위치를 반환한다.
【예시】
UPDATE print_media SET ad_photo = EMPTY_BLOB();
 
4-7) EMPTY_CLOB 함수
--------------------------------------------------------------------------------
EMPTY_CLOB () 함수는 LOB 변수를 초기화하기 위하여 쓰이거나,
 또는 INSERT 문이나 UPDATE 문에서 empty LOB 위치를 반환한다.
【예시】
UPDATE print_media SET ad_photo = EMPTY_CLOB();
 
4-8) EXISTSNODE 함수
--------------------------------------------------------------------------------
이 함수는 node의 존재여부를 확인하여 그 결과를 반환한다.
 0은 노드가 남아 있지 않은 경우이고,
 1은 아직 노드가 존재하는 경우이다.
【형식】
EXISTSNODE(XMLType_instance, XPath_string [,namespace_string] )
【예제】
SQL> select * from resource_view;
SQL> select res,any_path
  2  from resource_view
  3  where existsnode(res, 'xdbconfig.xml') =0;
26 rows selected.
SQL>
 

4-9) EXTRACT(XML) 함수
--------------------------------------------------------------------------------
이 함수는 existsnode와 유사한 함수이다.
【형식】
EXTRACT(XMLType_instance, XPath_string [,namespace_string] )
【예제】
SQL> select * from resource_view;
SQL> select extract(res,'xdbconfig.xml')
  2  from resource_view;
 
26 rows selected.
SQL>
 

4-10) EXTRACTVALUE 함수
--------------------------------------------------------------------------------
이 함수는 existsnode와 유사한 함수로써 node의 스칼라 값을 반환한다.
【형식】
EXTRACTVALUE(XMLType_instance, XPath_string [,namespace_string] )
【예제】
SQL> select * from resource_view;
SQL> select extractvalue(res,'xdbconfig.xml')
  2  from resource_view;
 
26 rows selected.
SQL>
 
4-11) GREATEST 함수
--------------------------------------------------------------------------------
GREATEST (expr,...) 함수는 expr 중에서 가장 큰 값을 반환한다.
【예제】
SQL> select greatest(20,10,30) from dual;
GREATEST(20,10,30)
------------------
                30
SQL>
 
4-12) LEAST 함수
--------------------------------------------------------------------------------
LEAST (expr,...) 함수는 expr 중에서 가장 작은 값을 반환한다.
【예제】
SQL> select least(20,10,30) from dual;
GREATEST(20,10,30)
------------------
                10
SQL> select least('bb','aa','cc') from dual;
GR
--
aa
SQL>
 
4-13) NLS_CHARSET_DECL_LEN 함수
--------------------------------------------------------------------------------
NLS_CHARSET_DECL_LEN (byte_count , char_set_id) 함수는 nchar로 선언된 폭을 반환한다.
【예제】
SQL> select nls_charset_decl_len
  2  (200, nls_charset_id('ja16eucfixed')) from dual
NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EUCFIXED'))
--------------------------------------------------------
                                                     100
SQL>
 

4-14) NLS_CHARSET_ID 함수
--------------------------------------------------------------------------------
nls_charset_id('text') 함수는 문자셋 이름에 대응하는 ID 번호를 반환한다.
 여기서 text는 서버에서 지원되는 CHAR_CS나 NCHAR_CS이다.
【예제】
SQL> select nls_charset_id('ja16euc') from dual;
NLS_CHARSET_ID('JA16EUC')
-------------------------
                      830
SQL>
 
4-15) NLS_CHARSET_NAME 함수
--------------------------------------------------------------------------------
nls_charset_name('number') 함수는 문자섹 ID 번호에 대응하는 문자의 이름을 반환한다.
【예제】
SQL> select nls_charset_name(830) from dual;
NLS_CHA
-------
JA16EUC
SQL> select nls_charset_name(1) from dual;
NLS_CHAR
--------
US7ASCII
SQL>
 

4-16) NULLIF 함수
--------------------------------------------------------------------------------
NULLIF(expr1, expr2) 함수는
 expr1과 expr2를 비교하여
       같으면 null을 반환하고,
       같지 않으면 expr1을 반환한다.
이는 CASE 문으로 쓰면 다음과 같다.
  CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
【예제】
SQL> select nullif('aa','AA') from dual;
NU
--
aa
SQL> select nullif('aa','aa') from dual;
NU
--

SQL>
 

4-17) NVL2 함수
--------------------------------------------------------------------------------
NVL2(expr1, expr2, expr3) 함수는
   expr1이 null이 아니면 expr2를 반환하고,
   expr1이 null이면 expr3을 반환한다.
【예제】
SQL> select nvl2('','Corea','Korea') from dual;
NVL2(
-----
Korea
SQL> select nvl2('aa','Corea','Korea') from dual;
NVL2(
-----
Corea
SQL>
 

4-18) PATH 함수
--------------------------------------------------------------------------------
PATH(correlation_path) 함수는 under_path나 equals_path의 보조함수로서,
 자원의 관계경로를 반환한다.
【예제】
SQL> select * from resource_view;
SQL> select path(1), depth(2)
  2  from resource_view
  3  where under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 1)=1?
  4    and under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 2)=1;
PATH(1)                                      DEPTH(2)
------------------------------------------ ----------
/xml.xsd                                            1
        
SQL>
 

4-19) SYS_CONNECT_BY_PATH 함수
--------------------------------------------------------------------------------
SYS_CONNECT_BY_PATH(column, char) 함수는 계층적 쿼리에서만 유효하며,
 column의 절대 경로를 char로 지정한 문자로 분리하여 반환한다.
【예제】
SQL> select sys_connect_by_path(name, '/') from emp
  2  start with name='jijoe'
  3  connect by prior id=1101;
SYS_CONNECT_BY_PATH(NAME,'/')
-----------------------------
/jijoe
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 
4-20) SYS_CONTEXT 함수
--------------------------------------------------------------------------------
 이 함수는 namespace와 관계되는 parameter의 값을 반환한다.
【형식】
SYS_CONTEXT('namespace','parameter' [,length])
【예제】
SQL> select sys_context('userenv','session_user') from dual;
SYS_CONTEXT('USERENV','SESSION_USER')
-------------------------------------
JIJOE
SQL> select sys_context('userenv','lang') from dual;
SYS_CONTEXT('USERENV','LANG')
-----------------------------
US
SQL>
 userenv에서 사용될 parameter는 다음과 같다.
AUDITED_CURSORID AUTHENTICATION_DATA BG_JOB_ID
CLIENT_IDENTIFIER CLIENT_INFO  CURRENT_SCHEMA
CURRENT_SCHEMAID CURRENT_SQL  CURRENT_USER
CURRENT_USERID  DB_DOMAIN  DB_NAME
ENTRY_ID  EXTERNAL_NAME  FG_JOB_ID
GLOBAL_CONTEXT_MEMORY HOST   INSTANCE
IP_ADDRESS  ISDBA   LANG
LANGUAGE  NETWORK_PROTOCOL NLS_CALENDAR
NLS_CURRENCY  NLS_DATE_FORMAT  NLS_DATE_LANGUAGE
NLS_SORT  NLS_TERRITORY  OS_USER
PROXY_USER  PROXY_USERID  SESSION_USER
SESSION_USERID  SESSIONID  TERMINAL
 

4-21) SYS_DBURIGEN 함수
--------------------------------------------------------------------------------
이 함수는 입력된 argument에 대한 DBURIType의 URL을 반환한다.
【형식】
SYS_DBURIGEN({column|attribute} [rowid],... [,'text()'])
【예제】
SQL> select sys_dburigen(id,name) from emp
  2  where name='jijoe';
SYS_DBURIGEN(ID,NAME)(URL, SPARE)
------------------------------------------------------------------------
DBURITYPE('/PUBLIC/EMP/ROW[ID=''1104'']/NAME', NULL)
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 
4-22) SYS_EXTRACT_UTC 함수
--------------------------------------------------------------------------------
sys_extract_utc(datetime_with_timezone) 함수는
UTC(coordinated universal time: Greenwich mean time) 시각을 반환한다. 
【예제】
SQL> select systimestamp, sys_extract_utc(systimestamp) from dual;
SYSTIMESTAMP
--------------------------------------------------------------------------
SYS_EXTRACT_UTC(SYSTIMESTAMP)
--------------------------------------------------------------------------
06-AUG-04 02.41.39.258976 PM +09:00
06-AUG-04 05.41.39.258976 AM

SQL>
 
4-23) SYS_GUID 함수
--------------------------------------------------------------------------------
sys_guid() 함수는 globally unique identifier를 반환한다.
【예제】
SQL> select sys_guid() from dual;
SYS_GUID()
--------------------------------
E0F6C6D5767C01ADE034080020B588F4
SQL>
 
4-24) SYS_XMLAGG 함수
--------------------------------------------------------------------------------
이 함수는 sys_xmlgen 문에서 만든 XML 문을 기본적으로 ROWSET 태그를 새로 추가 시킨다.
【형식】
SYS_XMLAGG( expr [fmt] )
【예제】
SQL> select sys_xmlagg(sys_xmlgen(name)) from emp
  2  where name like 'j%';
SYS_XMLAGG(SYS_XMLGEN(NAME))
--------------------------------------------------------------------------
<ROWSET>
  <NAME>jijoe</NAME>
</ROWSET>

SQL>
 
4-25) SYS_XMLGEN 함수
--------------------------------------------------------------------------------
이 함수는 지정한 행이나 열을 XML 문으로 만들어 반환한다.
【형식】
SYS_XMLGEN( expr [fmt] )
【예제】
SQL> select sys_xmlgen(name) from emp
  2  where name like 'j%';
SYS_XMLGEN(NAME)
--------------------------------------------------------------------------
<NAME>jijoe</NAME>
SQL>
 
4-26) UID 함수
--------------------------------------------------------------------------------
UID 함수는 사용자의 유일한 ID를 정수로 반환한다.
【예제】
SQL> select uid from dual;
       UID
----------
        93
SQL>
 
4-27) USER 함수
--------------------------------------------------------------------------------
이 함수는 사용자의 이름을 반환한다.
【예제】
SQL> select user,uid from dual;
USER                                  UID
------------------------------ ----------
JIJOE                                  93
SQL>
 

4-28) USERENV 함수
--------------------------------------------------------------------------------
USERENV('parameter') 함수는 사용자의 환경에 관한 정보를 반환한다.
 parameter는 다음과 같은 것이 있다.
CLIENT_INFO ENTRYID  ISDBA  LANG 
LANGUAGE SESSIONID TERMINAL
【예제】
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.KO16KSC5601
SQL>
 
 
4-29) VSIZE 함수
--------------------------------------------------------------------------------
VSIZE('expr') 함수는 expr이 표시되는 바이트 수를 반환한다.
【예제】
SQL> select name, vsize(name) from emp
  2  where name like 'jijoe';
NAME       VSIZE(NAME)
---------- -----------
jijoe                5
SQL>
$ cat .profile
..........
NLS_LANG=AMERICAN_AMERICA.KO16KSC5601  ☜ 한글 문자셋으로 설정
export NLS_LANG
NLS_LANG=AMERICAN_AMERICA.UTF8  ☜ UNICODE로 설정
export NLS_LANG
$

테이블에서 저장된 데이터가 한글 문자셋인지 유니코드인지 식별하려면 다음과 같이 확인해 볼 수 있다.
    select 한글컬럼명, vsize(한글컬럼명) from 테이블명;
여기서 한글 컬럼에 한글이 3글자라면, vsize 결과가
    9이면 unicode이고,
    6이면 한글 문자셋으로 저장된 것임을 알 수 있다.
【예제】
SQL> select * from test;
 
        ID NAME
---------- ----------------------------------------
      1113 아리랑
      1112 쓰리랑
 
SQL> select name, vsize(name) from test;
 
NAME                                     VSIZE(NAME)
---------------------------------------- -----------
아리랑                                             6
쓰리랑                                             6
 
SQL>
 

4-30) XMLAGG 함수
--------------------------------------------------------------------------------
이 함수는 xmlelement에 의해서 XML 태그를 만든 문장을 모으는 기능이다.
【형식】
XMLAGG( XMLType_instance [order_by_clause])
【예제】
 SQL> select xmlagg(xmlelement("name",e.name)) from emp e;
XMLAGG(XMLELEMENT("NAME",E.NAME))
--------------------------------------------------------------------------
<name>Cho</name>
<name>Joe</name>
<name>kim</name>
<name>jijoe</name>
SQL>
 

4-31) XMLCOLATTVAL 함수
--------------------------------------------------------------------------------
이 함수는 XML fragment를 만드는 기능이다
【형식】
XMLCOLATTVAL( value_expr [AS c_alias],...)
【예제】
SQL> select xmlcolattval(e.name,e.id,e.salary) from emp e;
XMLCOLATTVAL(E.NAME,E.ID,E.SALARY)
--------------------------------------------------------------------------
<column name="NAME">Cho</column>
<column name="ID">1101</column>
<column name="S
<column name="NAME">Joe</column>
<column name="ID">1102</column>
<column name="S
<column name="NAME">kim</column>
<column name="ID">1103</column>
<column name="S
<column name="NAME">jijoe</column>
<column name="ID">1104</column>
<column name=

SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 

4-32) XMLCONCAT 함수
--------------------------------------------------------------------------------
XMLCONCAT( XMLType_instance,...) 함수는 XMLType instance를 series로 넣어 만드는 기능이다.
【예제】
SQL> select xmlconcat(
  2    xmlelement("name",e.name),xmlelement("bonus",e.bonus))
  3  from emp e;
XMLCONCAT(XMLELEMENT("NAME",E.NAME),XMLELEMENT("BONUS",E.BONUS))
--------------------------------------------------------------------------
<name>Cho</name>
<bonus>125</bonus>
<name>Joe</name>
<bonus>100</bonus>
<name>kim</name>
<bonus>100</bonus>
<name>jijoe</name>
<bonus>100</bonus>
SQL>
 
4-33) XMLFOREST 함수
--------------------------------------------------------------------------------
이 함수는 각각의 argument parameter를  XML로 변환한다.
【형식】
XMLFOREST( value_expr [AS c_alias],...)
【예제】
SQL> select xmlelement("emp",
  2  xmlforest(e.id, e.name, e.bonus)) from emp e;
XMLELEMENT("EMP",XMLFOREST(E.ID,E.NAME,E.BONUS))
--------------------------------------------------------------------------
<emp>
  <ID>1101</ID>
  <NAME>Cho</NAME>
  <BONUS>125</BONUS>
</emp>
<emp>
  <ID>1102</ID>
  <NAME>Joe</NAME>
  <BONUS>100</BONUS>
</emp>
<emp>
  <ID>1103</ID>
  <NAME>kim</NAME>
  <BONUS>100</BONUS>
</emp>
<emp>
  <ID>1104</ID>
  <NAME>jijoe</NAME>
  <BONUS>100</BONUS>
</emp>
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 
 
4-34) XMLELEMENT 함수
--------------------------------------------------------------------------------
이 함수는 XML 태그를 붙이는 기능이다
【예제】
SQL> select xmlelement("name",e.name) from emp e
  2  where name like 'j%';
XMLELEMENT("NAME",E.NAME)
--------------------------------------------------------------------------
<name>jijoe</name>
SQL>
 

5-1) AVG* 함수
--------------------------------------------------------------------------------
조건을 만족하는 행(row)의 평균을 값을 반환하며,
 aggregate 함수나
 analytic 함수로 사용된다.
【형식】
AVG( [DISTINCT | ALL] 컬럼명)
   [ [OVER] (analytic 절)]
【예제】aggregate 예
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL> select avg(salary) from emp;
AVG(SALARY)
-----------
        240
SQL>
【예제】analytic 예
SQL> select avg(distinct salary) over(partition by bonus)
  2  from emp;
AVG(DISTINCTSALARY)OVER(PARTITIONBYBONUS)
-----------------------------------------
                               236.666667
                               236.666667
                               236.666667
                                      250

SQL> select avg(salary) over(partition by bonus order by id
    2 rows between 1 preceding and 1 following) as avg  from emp;
       AVG
----------
       245
236.666667
       235
       250
SQL>
 

5-2) CORR* CORR* 함수
--------------------------------------------------------------------------------
집합 쌍의 상관관계 계수를 반환한다.
【형식】
CORR( expr1, expr2 ) [ [OVER] (analytic 절)]
【예제】
SQL> select corr(avg(bonus),max(bonus))
  2  from employees
  3  group by dept_no;
CORR(AVG(BONUS),MAX(BONUS))
---------------------------
                          1
SQL>
 
5-3) COUNT* 함수
--------------------------------------------------------------------------------

 쿼리한 행의 수를 반환한다.
【형식】
COUNT([*|DISTINCT|ALL] 컬럼명) [ [OVER] (analytic 절)]
【예제】
SQL> select count(*) from emp;
  COUNT(*)
----------
         4
SQL> select count (distinct dept_no) from employees;
COUNT(DISTINCTDEPT_NO)
----------------------
                     2
SQL> select count (all dept_no) from employees;
COUNT(ALLDEPT_NO)
-----------------
                4
SQL> select salary,count(*)
  2  over (order by salary)
  3  from emp;
    SALARY COUNT(*)OVER(ORDERBYSALARY)
---------- ---------------------------
       220                           1
       240                           2
       250                           4
       250                           4
SQL>
 

5-4) COVAR_POP 함수
--------------------------------------------------------------------------------
이 함수는 number 쌍의 집합에 대한 population covariance를 반환한다.
【형식】
COVAR_POP(expr1, expr2 [ OVER (analytic 절)] )
【예제】
SQL> select covar_pop(bonus,salary) from emp;
COVAR_POP(BONUS,SALARY)
-----------------------
                   62.5
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 
5-5) COVAR_SAMP 함수
--------------------------------------------------------------------------------
이 함수는 number 쌍의 집합에 대한 sample covariance를 반환한다.
【형식】
COVAR_SAMP(expr1, expr2 [ OVER (analytic 절)] )
【예제】
SQL> select covar_samp(bonus,salary) from emp;
COVAR_SAMP(BONUS,SALARY)
------------------------
              83.3333333
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 
5-6) CUME_DIST 함수
--------------------------------------------------------------------------------
이 함수는 그룹 값 내에서 어떤 값의 cumulative distribution(누적분포)을 계산한다.
【형식】
CUME_DIST(expr,... WITHIN GROUP (ORDER BY
     expr [DESC | ASC] [NULLS {FIRST|LAST}],...)
또는
CUME_DIST() over ([query_partition_clause] order_by_clause)
【예제】
SQL> select cume_dist(230) within group
  2  (order by salary ) from emp;
CUME_DIST(230)WITHINGROUP(ORDERBYSALARY)
----------------------------------------
                                      .4
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 

5-7) DENSE_RANK 함수
--------------------------------------------------------------------------------

그룹 내에서 순위를 반환한다.
【예제】
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL> select dense_rank(230, .05) within group
  2  (order by salary, bonus) "Dense Rank"
  3  from employees;
Dense Rank
----------
         2
SQL>
 

5-8) FIRST 함수
--------------------------------------------------------------------------------
first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.
【형식】
집합함수 KEEP (
 DENSE_RANK FIRST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;
     Worst       Best
---------- ----------
       220        250
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-9) GROUP_ID 함수
--------------------------------------------------------------------------------
GROUP() 함수는 group by로 분리되어 복제된 번호로 복제 횟수를 구분하도록 출력한다.
번호가 0부터 시작되므로 n번 복제되었으면 n-1의 번호가 출력된다.
【예제】
SQL> select dept_no, group_id() from employees
  2  group by dept_no;
   DEPT_NO GROUP_ID()
---------- ----------
        10          0
        20          0
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-10) Grouping 함수
--------------------------------------------------------------------------------
Grouping 함수는 Rollup이나 cube 연산자랑 함께 사용하여
 grouping 함수에서 기술된 컬럼이 그룹핑시 사용되었는지 보여주는 함수이다.
특별히 연산의 기능은 없으며,
  rollup이나 cube 연산 후 출력된 결과에 대한 사용자의 이해를 높이기 위해 사용된다.
  즉, grouping 함수를 이용할 경우 출력되는 결과값 중 null 값이 있다면,
      이 null 값이 rollup이나 cube 연산의 결과로 생성된 값인지,
      원래 테이블상에 null 값으로 저장된 것인지 확인할 수 있다.
. grouping 함수는 인수로 하나의 값만을 가진다.
. grouping 함수에 사용된 인수는 group by 절에 기술된 값 중에 하나와 반드시 일치해야 한다.
. grouping 함수의 결과값으로 0 또는 1을 반환한다.
    0은 해당인수로 쓰인 값이 rollup이나 cube 연산에 사용되었음을 나타나고,
    1은 사용되지 않았음을 의미한다.
【형식】
SELECT   컬럼명,그룹함수(컬럼명), GROUPING(컬럼명)
FROM  테이블명
WHERE  조건
GROUP BY [ROLLUP | CUBE] 그룹핑하고자하는 컬럼명,...
HAVING  그룹조건
ORDER BY 컬럼명 또는 위치번호
【예제】
SQL> select grade,deptno,sum(salary),GROUPING(deptno)
  2  from aaa
  3  group by rollup(grade,deptno);
     GRADE     DEPTNO SUM(SALARY) GROUPING(DEPTNO)
---------- ---------- ----------- ----------------
         1         10         100                0
         1         20         500                0
         1         30         300                0
         1                    900                1
         2         10         400                0
         2         20         200                0
         2         30         600                0
         2                   1200                1
                             2100                1
9 rows selected.
SQL>
 
5-11) GROUPING_ID 함수
--------------------------------------------------------------------------------
GROUPING_ID(expr,...) 함수는 행과 관련되는 GROUPING 비트 벡터에 대응되는 수치를 반환한다.
【예제】
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL> select sum(salary), grouping_id(dept_no)
  2  from employees
  3  group by dept_no;
SUM(SALARY) GROUPING_ID(DEPT_NO)
----------- --------------------
        500                    0
        460                    0
SQL>
 
5-12) LAST 함수
--------------------------------------------------------------------------------
first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.
【형식】
집합함수 KEEP (
 DENSE_RANK LAST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;
     Worst       Best
---------- ----------
       220        250
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-13) MAX 함수
--------------------------------------------------------------------------------
이 함수는 최대 값을 반환한다.
【형식】
MAX ([{DISTINCT|ALL}] expr) [OVER(analytic_clause)]
【예제】
SQL> select max(salary) over (partition by dept_no)
  2  from employees;
MAX(SALARY)OVER(PARTITIONBYDEPT_NO)
-----------------------------------
                                250
                                250
                                240
                                240
SQL> select max(salary) from employees;
MAX(SALARY)
-----------
        250
SQL>
 
5-14) MIN 함수
--------------------------------------------------------------------------------
이 함수는 최소 값을 반환한다.
【형식】
MIN ([{DISTINCT|ALL}] expr) [OVER(analytic_clause)]
【예제】
SQL> select min(salary) over (partition by dept_no)
  2  from employees;
MIN(SALARY)OVER(PARTITIONBYDEPT_NO)
-----------------------------------
                                250
                                250
                                220
                                220
SQL> select min(salary) from employees;
MIN(SALARY)
-----------
        220
SQL>
 

5-15) PERCENTILE_CONT 함수
--------------------------------------------------------------------------------
이 함수는 연속 모델에 대한 inverse distribution function이다.
【형식】
PERCENTILE_CONT(expr) WITHIN GROUP (ORDER BY expr [{DESC|ASC}])
  [OVER (query_partition_cluause)]
【예제】
SQL> select dept_no,percentile_cont(0.5) within group
  2  (order by salary DESC)
  3  from employees GROUP BY dept_no;
   DEPT_NO PERCENTILE_CONT(0.5)WITHINGROUP(ORDERBYSALARYDESC)
---------- --------------------------------------------------
        10                                                250
        20                                                230
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-16) PERCENTILE_DISC 함수
--------------------------------------------------------------------------------
이 함수는 불연속 모델에 대한 inverse distribution function이다.
【형식】
PERCENTILE_DISC(expr) WITHIN GROUP (ORDER BY expr [{DESC|ASC}])
  [OVER (query_partition_cluause)]
【예제】
SQL> select dept_no,percentile_disc(0.5) within group
  2  (order by salary DESC)
  3  from employees GROUP BY  dept_no;
   DEPT_NO PERCENTILE_DISC(0.5)WITHINGROUP(ORDERBYSALARYDESC)
---------- --------------------------------------------------
        10                                                250
        20                                                240
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-17) PERCENT_RANK 함수
--------------------------------------------------------------------------------
이 함수는 CUME_DIST 함수와 유사하게 percent_rank 값을 반환한다.
【형식】
PERCENT_RANK(expr,...) WITHIN GROUP (ORDER BY expr [{DESC|ASC}]
  [NULLS {FIRST|LAST}],...)
또는
PERCENT_RANK() OVER( [query_partition_clause] order_by_clause)
【예제】
SQL> select percent_rank(230,0.05) within group
  2  (order by salary,bonus) from employees;
PERCENT_RANK(230,0.05)WITHINGROUP(ORDERBYSALARY,BONUS)
------------------------------------------------------
                                                   .25
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-18) RANK 함수
--------------------------------------------------------------------------------
이 함수는 그룹 내에서 위치를 반환한다.
【형식】
RANK(expr,...) WITHIN GROUP (ORDER BY expr [{DESC|ASC}]
  [NULLS {FIRST|LAST}],...)
또는
RANK() OVER( [query_partition_clause] order_by_clause)
【예제】
SQL> select rank(230,0.05) within group
  2 (order by salary,bonus) from employees;
RANK(230,0.05)WITHINGROUP(ORDERBYSALARY,BONUS)
----------------------------------------------
                                             2
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-19) REGR_(linear regression) function* 함수
--------------------------------------------------------------------------------
선형 회귀(linear regression) 함수 ordinary-least squares regression line을 찾도록 한다.
 사용되는 회귀함수는 자음 중 하나이다.
 REGR_SLOPE REGR_INTERCEPT REGR_COUNT
 REGR_R2 REGR_AVGX REGR_AVGY 
 REGR_SXX REGR_SYY REGR_SXY
【형식】
REGR { REGR_SLOPE|REGR_INTERCEPT|REGR_COUNT|REGR_R2|REGR_AVGX|
       REGR_AVGY|REGR_SXX|REGR_SYY|REGR_SXY}
    (expr1,expr2) [OVER (analytic_clause)]
【예제】
SQL> select regr_slope(salary,bonus) from employees
REGR_SLOPE(SALARY,BONUS)
------------------------
              .533333333
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

5-20) STDDEV 함수
--------------------------------------------------------------------------------
이 함수는 standard deviation을 반환한다.
【형식】
STDDEV [{DISTINCT|ALL}] (expr) [OVER (analytic_clause)]
【예제】
SQL> select stddev(salary) from emp;
STDDEV(SALARY)
--------------
    14.1421356
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 

5-21) STDDEV_POP 함수
--------------------------------------------------------------------------------
이 함수는 population standard deviation을 반환한다.
【형식】
STDDEV_POP (expr) [OVER (analytic_clause)]
【예제】
SQL> select stddev_pop(salary) from emp;
STDDEV_POP(SALARY)
------------------
        12.2474487
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>

5-22) STDDEV_SAMP 함수
--------------------------------------------------------------------------------
이 함수는 cumulative sample standard deviation을 반환한다.
【형식】
STDDEV_SAMP (expr) [OVER (analytic_clause)]
【예제】
SQL> select stddev_samp (salary) from emp;
STDDEV_SAMP(SALARY)
-------------------
         14.1421356
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>
 

5-23) SUM 함수
--------------------------------------------------------------------------------
이 함수는 합계를 반환한다.
【형식】
SUM ([{DISTINCT|ALL}] expr) [OVER (analytic_clause)]
【예제】
SQL> select sum(salary) from emp;
SUM(SALARY)
-----------
        960
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 

5-24) VAR_POP 함수
--------------------------------------------------------------------------------
이 함수는 population variance를 반환한다.
【형식】
VAR_POP (expr) [OVER (analytic_clause)]
【예제】
SQL> select var_pop(salary) from emp;
VAR_POP(SALARY)
---------------
            150
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>
 

5-25) VAR_SAMP 함수
--------------------------------------------------------------------------------
이 함수는 sample variance를 반환한다.
【형식】
VAR_SAMP (expr) [OVER (analytic_clause)]
【예제】
SQL> select var_samp(salary) from emp;
VAR_SAMP(SALARY)
----------------
             200
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>
 

5-26) VARIANCE 함수
--------------------------------------------------------------------------------
이 함수는 variance를 반환한다.
【형식】
VARIANCE ([{DISTINCT|ALL}] expr) [OVER (analytic_clause)]
【예제】
SQL> select variance(salary) from emp;
VARIANCE(SALARY)
----------------
             200
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 

5-27) Grouping sets 함수
--------------------------------------------------------------------------------
Grouping sets 함수는 Group by의 확장된 형태로 하나의 쿼리문에서 원하는 그룹핑 조건을 여러 개 기술할 수 있으며,
 grouping sets 함수 사용이 불가능한 이전 버전에서
 복잡한 union all 연산자를 사용하여 기술하던 것을 간단하게
 한 문장 안에서 해결할 수 있어 검색시 효율성이 증대 된다.
 다시 말해서, grouping sets 함수를 사용하면,
              group by ... union all을 사용한 것보다
              SQL 문이 간단해지고 또한 실행시 성능이 빨라진다.
【형식】
SELECT   컬럼명,그룹함수(컬럼명), GROUPING(컬럼명)
FROM  테이블명
WHERE  조건
GROUP BY [ROLLUP | CUBE] 그룹핑하고자하는 컬럼명, ...
  [GROUPING SETS (컬럼명,컬럼명, ...), ...]
HAVING  그룹조건
ORDER BY 컬럼명 또는 위치번호
【예제】
SQL> select grade,deptno,sum(salary)
  2  from aaa
  3  group by grouping sets(grade,deptno);
     GRADE     DEPTNO SUM(SALARY)
---------- ---------- -----------
         1                    900
         2                   1200
                   10         500
                   20         700
                   30         900
SQL> select grade,deptno,sum(salary)
  2  from aaa
  3  group by grouping sets((grade,name),(deptno,name));
     GRADE     DEPTNO SUM(SALARY)
---------- ---------- -----------
         1                    100
         1                    300
         1                    500
         2                    200
         2                    400
         2                    600
                   10         100
                   20         200
                   30         300
                   10         400
                   20         500
                   30         600
12 rows selected.
SQL>
【예제】Union all을 사용한 경우
SQL> select grade,deptno,sum(salary)
  2  from aaa
  3  group by grade,deptno
  4  union all
  5  select grade,deptno,sum(salary)
  6  from aaa
  7  group by grade,deptno;
     GRADE     DEPTNO SUM(SALARY)
---------- ---------- -----------
         1         10         100
         1         20         500
         1         30         300
         2         10         400
         2         20         200
         2         30         600
         1         10         100
         1         20         500
         1         30         300
         2         10         400
         2         20         200
         2         30         600
12 rows selected.
SQL>
composite columns란 rollup, cube, grouping sets 절과 같은 기능을 사용하면
표현되는 각 컬럼이 하나가 아닌 복수 개의 컬럼으로 정의되는 경우이며
다음 표를 보고 이해하자.
composite column 문의 경우  group by 문의 경우 group by grouping sets(a,b,c)  group by a union allgroup by b union allgroup by c  group by grouping sets(a,b,(b,c))  group by a union allgroup by b union allgroup by b,c  group by grouping sets((a,b,c))  group by a,b,c  group by grouping sets(a,(b),())  group by a union allgroup by b union allgroup by ()  group by grouping sets(a,rollup(b,c))  group by a union allgroup by rollup(b,c)  group by rollup(a,b,c)  group by (a,b,c) union allgroup by (a,b) union allgroup by (a) union allgroup by ()  group by cube(a,b,c)  group by (a,b,c) union allgroup by (a,b) union allgroup by (a,c) union allgroup by (b,c) union allgroup by (a) union allgroup by (b) union allgroup by (c) union allgroup by () 
 

6-1) AVG* 함수
--------------------------------------------------------------------------------
조건을 만족하는 행(row)의 평균을 값을 반환하며,
 aggregate 함수나
 analytic 함수로 사용된다.
【형식】
AVG( [DISTINCT | ALL] 컬럼명)
   [ [OVER] (analytic 절)]
【예제】aggregate 예
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL> select avg(salary) from emp;
AVG(SALARY)
-----------
        240
SQL>
【예제】analytic 예
SQL> select avg(distinct salary) over(partition by bonus)
  2  from emp;
AVG(DISTINCTSALARY)OVER(PARTITIONBYBONUS)
-----------------------------------------
                               236.666667
                               236.666667
                               236.666667
                                      250

SQL> select avg(salary) over(partition by bonus order by id
    2 rows between 1 preceding and 1 following) as avg  from emp;
       AVG
----------
       245
236.666667
       235
       250
SQL>
 

6-2) CORR* CORR* 함수
--------------------------------------------------------------------------------
집합 쌍의 상관관계 계수를 반환한다.
【형식】
CORR( expr1, expr2 ) [ [OVER] (analytic 절)]
【예제】
SQL> select corr(avg(bonus),max(bonus))
  2  from employees
  3  group by dept_no;
CORR(AVG(BONUS),MAX(BONUS))
---------------------------
                          1
SQL>
 
6-3) COUNT* 함수
--------------------------------------------------------------------------------

 쿼리한 행의 수를 반환한다.
【형식】
COUNT([*|DISTINCT|ALL] 컬럼명) [ [OVER] (analytic 절)]
【예제】
SQL> select count(*) from emp;
  COUNT(*)
----------
         4
SQL> select count (distinct dept_no) from employees;
COUNT(DISTINCTDEPT_NO)
----------------------
                     2
SQL> select count (all dept_no) from employees;
COUNT(ALLDEPT_NO)
-----------------
                4
SQL> select salary,count(*)
  2  over (order by salary)
  3  from emp;
    SALARY COUNT(*)OVER(ORDERBYSALARY)
---------- ---------------------------
       220                           1
       240                           2
       250                           4
       250                           4
SQL>
 

6-4) COVAR_SAMP 함수
--------------------------------------------------------------------------------
이 함수는 number 쌍의 집합에 대한 sample covariance를 반환한다.
【형식】
COVAR_SAMP(expr1, expr2 [ OVER (analytic 절)] )
【예제】
SQL> select covar_samp(bonus,salary) from emp;
COVAR_SAMP(BONUS,SALARY)
------------------------
              83.3333333
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 

6-5) CUME_DIST 함수
--------------------------------------------------------------------------------
이 함수는 그룹 값 내에서 어떤 값의 cumulative distribution(누적분포)을 계산한다.
【형식】
CUME_DIST(expr,... WITHIN GROUP (ORDER BY
     expr [DESC | ASC] [NULLS {FIRST|LAST}],...)
또는
CUME_DIST() over ([query_partition_clause] order_by_clause)
【예제】
SQL> select cume_dist(230) within group
  2  (order by salary ) from emp;
CUME_DIST(230)WITHINGROUP(ORDERBYSALARY)
----------------------------------------
                                      .4
SQL> select * from emp;
        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100
SQL>
 
6-6) DENSE_RANK 함수
--------------------------------------------------------------------------------

그룹 내에서 순위를 반환한다.
【예제】
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL> select dense_rank(230, .05) within group
  2  (order by salary, bonus) "Dense Rank"
  3  from employees;
Dense Rank
----------
         2
SQL>
 
6-7) FIRST 함수
--------------------------------------------------------------------------------
first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.
【형식】
집합함수 KEEP (
 DENSE_RANK FIRST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;
     Worst       Best
---------- ----------
       220        250
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 
6-8) FIRST_VALUE 함수
--------------------------------------------------------------------------------
이 함수는 서열화된 값에서 첫 번째를 출력한다.
【형식】
FIRST_VALUE ( expr ) OVER ( analytic_절)
【예제】
SQL> select salary,first_value(name)
  2  over (order by salary asc)
  3  from (select * from employees
  4        where dept_no = 20
  5        order by salary);
    SALARY FIRST_VALU
---------- ----------
       220 jijoe
       240 jijoe
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 
6-9) LAG 함수
--------------------------------------------------------------------------------
이 함수는 analytic 함수로서,
self join하지 않고 하나의 테이블에서 동시에 한 행(row) 이상을 접근할 수 있도록 한다.
【형식】
LAG ( value_expr [,offset] [,default] )
     OVER ([query_partition_clause] order_by_clause )
【예제】
SQL> select name,salary,LAG(salary,1,0)    
  2   OVER (ORDER BY salary) FROM employees;
NAME           SALARY LAG(SALARY,1,0)OVER(ORDERBYSALARY)
---------- ---------- ----------------------------------
jijoe             220                                  0
Joe               240                                220
Cho               250                                240
kim               250                                250
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

6-10) LAST_VALUE 함수
--------------------------------------------------------------------------------
이 함수는 서열화된 값에서 마지막 번째를 출력한다.
【형식】
LAST_VALUE ( expr ) OVER ( analytic_절)
【예제】
SQL> select salary,last_value(name)
  2  over (order by salary asc)
  3  from (select * from employees
  4        where dept_no = 20
  5        order by salary);
    SALARY LAST_VALUE
---------- ----------
       220 jijoe
       240 Joe
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

6-11) LEAD 함수
--------------------------------------------------------------------------------
이 함수는 analytic 함수로서, self join하지 않고
하나의 테이블에서 동시에 한 행(row) 이상을 접근할 수 있도록 한다.
【형식】
LEAD ( value_expr [,offset] [,default] )
     OVER ([query_partition_clause] order_by_clause )
【예제】
SQL> select name,salary,LEAD(salary,1,0)   
  2   OVER (ORDER BY salary) FROM  employees;
NAME           SALARY LEAD(SALARY,1,0)OVER(ORDERBYSALARY)
---------- ---------- -----------------------------------
jijoe             220                                 240
Joe               240                                 250
Cho               250                                 250
kim               250                                   0
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 
6-12) NTILE 함수
--------------------------------------------------------------------------------
이 함수는 analytic 함수로서, 데이터를 주어진 bucket 수 expr로 분리한다.
【형식】
NTILE ( expr ) OVER ([query_partition_clause] order_by_clause )
【예제】
SQL> select name,salary,NTILE(3) OVER (ORDER BY salary DESC)
  2  FROM  employees;
NAME           SALARY NTILE(3)OVER(ORDERBYSALARYDESC)
---------- ---------- -------------------------------
Cho               250                               1
kim               250                               1
Joe               240                               2
jijoe             220                               3
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

6-13) RATIO_TO_REPORT 함수
--------------------------------------------------------------------------------
이 함수는 analytic 함수로서, 데이터 합에 대한 구성비를 계산한다.
【형식】
RATIO_TO_REPORT ( expr ) OVER ([query_partition_clause])
【예제】
SQL> select name,salary,RATIO_TO_REPORT(salary) OVER ()
  2   FROM  employees;
NAME           SALARY RATIO_TO_REPORT(SALARY)OVER()
---------- ---------- -----------------------------
Cho               250                    .260416667
Joe               240                           .25
kim               250                    .260416667
jijoe             220                    .229166667
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 

6-14) ROW_NUMBER 함수
--------------------------------------------------------------------------------
이 함수는 analytic 함수로서, 각 행(row)에 unique 번호를 부여한다.
【형식】
ROW_NUMBER () OVER ([query_partition_clause] order_by_clause )
【예제】
SQL> SELECT ROW_NUMBER() OVER (ORDER BY salary DESC),name
  2    FROM  employees;
ROW_NUMBER()OVER(ORDERBYSALARYDESC) NAME      
----------------------------------- ----------
                                  1 Cho       
                                  2 kim       
                                  3 Joe       
                                  4 jijoe     
SQL> select * from employees;
        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100
SQL>
 
 
7-1) REF 타입
--------------------------------------------------------------------------------
테이블의 어떤 컬럼이 독립된 다른 객체 테이블을 참조하는 데이터 타입을 의미한다.
일반적으로 테이블을 만들때 사용하는 외부키(foreign-key)를 이용한 참조관계와 유사하다.
REF 타입의 컬럼 데이터를 읽을 때는 반드시 DEREF 함수를 사용한다.
REF 타입으로 정의된 컬럼에는 실제 데이터가 저장되는 것이 아니고 참조되는 객체가 존재하는 포인트정보만 가지고 있기 때문에 객체가 삭제 된다면, 해당 컬러은 정상적으로 검색되지 못한다.
이러한 현상을 REF의 Dangling 현상이고 한다.
이러한 dangling 현상을 방지하기 위해서는 삭제된 객체 정보를 참조하는 행의 컬럼 정보를 analyze 명령어를 이용하여 null 값으로 변경해 주어야 한다.
【예제】
SQL> connect jijoe/jijoe_password
connected
SQL> create type person_type as object(
  2  first_name         varchar2(10),
  3  last_name          varchar2(10),
  4  phone              varchar(12),
  5  birthday           varchar2(12));
  6  /
Type created.
SQL> create type emp_type as object (
  2  empno      number,
  3  emp        person_type);
  4  /
Type created.
SQL> create table emp2 of emp_type
  2  oidindex emp_oid;
Table created.
SQL> insert into emp2 values(
  2  emp_type(1000,person_type('junik','joe','123-1234','20-jul-04')));
1 row created.
SQL> create table dept(
  2  empno      number(4),
  3  ename      varchar2(15),
  4  mgr        REF emp_type SCOPE IS emp2);
Table created.
SQL> insert into dept
  2  select empno, 'SCOTT', REF(e)
  3  from emp2 e
  4  where empno=1000;
1 row created.

【예제】
SQL> select ename,empno from dept;
ENAME                EMPNO
--------------- ----------
SCOTT                 1000
SQL> select mgr, DEREF(mgr) from dept;
MGR
--------------------------------------------------------------------------------
DEREF(MGR)(EMPNO, EMP(FIRST_NAME, LAST_NAME, PHONE, BIRTHDAY))
--------------------------------------------------------------------------------
0000220208DFA05B27A63701D9E034080020B588F4DFA05B27A63601D9E034080020B588F4
EMP_TYPE(1000, PERSON_TYPE('junik', 'joe', '123-1234', '20-jul-04'))

SQL>
【예제】
SQL> select empno,ename,mgr
  2  from dept
  3  where mgr is dangling;
no rows selected
SQL> analyze table dept validate REF update set dangling to NULL;
Table analyzed.
SQL>
 
8-1) ROWID 컬럼
--------------------------------------------------------------------------------
오라클에서 내부적으로 사용되는 컬럼을 pseudocolumn이라고 하며,
ROWID, ROWNUM등이 있다.
ROWID는 데이터베이스에서 컬럼이 위치한 장소이다.
【예제】
SQL> select rowid from test;
ROWID
------------------
AAAHbHAABAAAMXCAAA
SQL> select rowid from test
  2  where rowidtochar(rowid) like '%AABAA%';
ROWID
------------------
AAAHbHAABAAAMXCAAA
SQL> select lengthb(rowidtonchar(rowid)), rowidtonchar(rowid)
  2  from test;
LENGTHB(ROWIDTONCHAR(ROWID)) ROWIDTONCHAR(ROWID
---------------------------- ------------------
                          36 AAAHbHAABAAAMXCAAA
SQL>

여기서 rowid의 의미는 다음과 같다.
AAAHbH  AAB  AAAMXC  AAA 객체번호  테이블스페이스번호  블록번호  행번호
 

8-2) ROWNUM 컬럼
--------------------------------------------------------------------------------
오라클에서 내부적으로 사용되는 컬럼을 pseudocolumn이라고 하며,
ROWID, ROWNUM등이 있다.
ROWNUM은 테이블에서 select 되어진 일련 번호임
【예제】
SQL> select rownum,ename from emp;
 
    ROWNUM ENAME
---------- ----------
         1 CLARK
         2 MILLER
         3 JONES
         4 ALLEN
         5 MARTIN
         6 CHAN
 
6 rows selected.
 
SQL> delete from emp where ename='JONES';
 
1 row deleted.
 
SQL> select rownum,ename from emp;
 
    ROWNUM ENAME
---------- ----------
         1 CLARK
         2 MILLER
         3 ALLEN
         4 MARTIN
         5 CHAN
 
SQL> 
      
Posted by k_ben


참고하시고 msconfig에 가셔서 수정 요망.


0 0x0000 작업을 완료했습니다.
1 0x0001 올바르지 않은 함수입니다.
2 0x0002 지정한 파일을 찾을 수 없습니다.
3 0x0003 지정한 경로를 찾을 수 없습니다.
4 0x0004 파일을 열 수 없습니다.
5 0x0005 접근이 거부되었습니다.
6 0x0006 잘못된 핸들입니다.
7 0x0007 저장 컨트롤 블록이 손상되었습니다.
8 0x0008 저장 공간이 부족해서 이 명령을 수행할 수 없습니다.
9 0x0009 저장 컨트롤 블록 주소가 올바르지 않습니다.
10 0x000A 환경이 올바르지 않습니다.
11 0x000B 잘못된 형식의 프로그램을 로드하려고 했습니다.
12 0x000C 액세스 코드가 올바르지 않습니다.
13 0x000D 데이터가 올바르지 않습니다.
14 0x000E 저장 공간이 부족해서 이 작업을 완료할 수 없습니다.
15 0x000F 지정한 드라이브를 찾을 수 없습니다.
16 0x0010 디렉터리를 삭제할 수 없습니다.
17 0x0011 파일을 다른 디스크 드라이브로 이동할 수 없습니다.
18 0x0012 더 이상 파일이 없습니다.
19 0x0013 매체가 쓰기 금지되었습니다.
20 0x0014 지정한 장치를 찾을 수 없습니다.
21 0x0015 장치가 준비되지 않았습니다.
22 0x0016 장치가 명령을 인식하지 않습니다.
23 0x0017 데이터 오류 (주기적 중복 검사)
24 0x0018 프로그램에서 명령을 내렸으나 명령 길이가 올바르지 않습니다.
25 0x0019 드라이브에서 디스크의 특정 영역이나 트랙의 위치를 지정할 수 없습니다.
26 0x001A 지정한 디스크나 디스켓을 액세스할 수 없습니다.
27 0x001B 드라이브에서 요청한 섹터를 찾을 수 없습니다.
28 0x001C 프린터에 용지가 떨어졌습니다.
29 0x001D 지정한 장치에 쓸 수 없습니다.
30 0x001E 지정한 장치로부터 읽을 수 없습니다.
31 0x001F 시스템에 부착된 장치가 작동하지 않습니다.
32 0x0020 다른 프로세스에서 이 파일을 사용하고 있기 때문에 이 파일을 액세스할 수 없습니다.
33 0x0021 다른 프로세스에서 이 파일의 일부를 잠궜기 때문에 이 파일을 액세스할 수 없습니다.
34 0x0022 드라이브에 잘못된 디스켓이 있습니다. ? (볼륨 일련 번호: ?)을(를) in? 드라이브에 넣으십시오.
36 0x0024 공유하기 위해 연 파일이 너무 많습니다.
38 0x0026 파일의 끝입니다.
39 0x0027 디스크가 가득 차 있습니다.
50 0x0032 네트워크 요청이 지원되지 않습니다.
51 0x0033 원격 컴퓨터를 사용할 수 없습니다.
52 0x0034 네트워크에 중복된 이름이 있습니다.
53 0x0035 네트워크 경로를 찾을 수 없습니다.
54 0x0036 네트워크가 사용 중입니다.
55 0x0037 지정한 네트워크 리소스 또는 장치를 더 이상 사용할 수 없습니다.
56 0x0038 네트워크 BIOS 명령 한계에 도달했습니다.
57 0x0039 네트워크어댑터 하드웨어 오류가 발생했습니다.
58 0x003A 지정한 서버에서 요청한 작업을 수행할 수 없습니다.
59 0x003B 예기치 않은 네트워크 오류가 발생했습니다.
60 0x003C 원격 어댑터가 호환되지 않습니다.
61 0x003D 프린터 대기열이 가득 찼습니다.
62 0x003E 서버에 인쇄 대기 중인 파일을 저장할만한 공간이 없습니다.
63 0x003F 인쇄 대기 중인 파일이 삭제되었습니다.
64 0x0040 지정한 네트워크 이름을 더 이상 사용할 수 없습니다.
65 0x0041 네트워크 접근이 거부되었습니다.
66 0x0042 네트워크 리소스 종류가 올바르지 않습니다.
67 0x0043 네트워크 이름을 찾을 수 없습니다.
68 0x0044 지역 컴퓨터 네트워크 어댑터 카드의 이름 한계를 초과했습니다.
69 0x0045 네트워크 BIOS 세션 한계를 초과했습니다.
70 0x0046 원격 서버가 일시 중지되었거나 프로세스가 시작 중입니다.
71 0x0047 수용할 수 있는 최대 개수의 연결이 이미 있으므로 더 이상 연결을 작성 할 수 없습니다.
72 0x0048 지정한 프린터나 디스크 장치가 일시 중지되었습니다.
80 0x0050 파일이 존재합니다.
82 0x0052 디렉터리나 파일을 작성할 수 없습니다.
83 0x0053 INT 24에서 오류
84 0x0054 이 요청을 처리할만한 저장 공간이 없습니다.
85 0x0055 지역 장치 이름이 이미 사용 중입니다.
86 0x0056 지정한 네트워크 암호가 올바르지 않습니다.
87 0x0057 매개 변수가 올바르지 않습니다.
88 0x0058 네트워크에서 쓰기 오류가 발생했습니다.
89 0x0059 지금 다른 프로세스를 시작할 수 없습니다.
100 0x0064 다른 시스템 신호기를 작성할 수 없습니다.
101 0x0065 단독 신호기를 다른 프로세스가 소유하고 있습니다.
102 0x0066 신호기가 설정되었으므로 닫을 수 없습니다.
103 0x0067 신호기를 다시 설정할 수 없습니다.
104 0x0068 인터럽트 시간에 단독 신호기를 요청할 수 없습니다.
105 0x0069 이 신호기의 이전 소유권이 끝났습니다.
106 0x006A ? 드라이브에 디스켓을 넣으십시오.
107 0x006B 선택 디스켓을 넣지 않았으므로 프로그램이 중지되었습니다.
108 0x006C 디스크가 사용 중이거나 다른 프로세스에서 잠궜습니다.
109 0x006D 파이프가 종료되었습니다.
110 0x006E 지정한 장치나 파일을 열 수 없습니다.
111 0x006F 파일 이름이 너무 깁니다.
112 0x0070 디스크에 충분한 공간이 없습니다.
113 0x0071 사용할 수 있는 내부 파일 식별자가 이제 없습니다.
114 0x0072 대상 내부 파일 식별자가 올바르지 않습니다.
117 0x0075 응용 프로그램의 IOCTL 호출이 올바르지 않습니다.
118 0x0076 쓰기 확인(verify-on-write) 스위치 매개 변수 값이 올바르지 않습니다.
119 0x0077 요청한 명령이 지원되지 않습니다.
120 0x0078 이 함수는 Win32 모드에서만 유효합니다.
121 0x0079 신호기 시간 초과 기간이 만료되었습니다.
122 0x007A 시스템 호출에 전달된 데이터 영역이 너무 작습니다.
123 0x007B 파일 이름, 디렉터리 이름, 또는 디스크 이름의 구문이 올바르지 않습니다.
124 0x007C 시스템 호출 수준이 올바르지 않습니다.
125 0x007D 디스크에 디스크 이름이 없습니다.
126 0x007E 지정한 모듈을 찾을 수 없습니다.
127 0x007F 지정한 프로시저를 찾을 수 없습니다.
128 0x0080 대기 중인 하위 프로세스가 없습니다.
129 0x0081 ? 응용 프로그램을 Win32 모드에서 실행할 수 없습니다.
130 0x0082 원시 디스크 I/O 이외의 작업에 열려 있는 디스크 분할 영역의 파일 핸들을 사용하려고 했습니다.
131 0x0083 파일의 시작 부분 앞으로 파일 포인터를 옮기려고 했습니다.
132 0x0084 지정한 장치나 파일에 설정할 수 없는 파일 포인터입니다.
133 0x0085 JOIN이나 SUBST 명령을 이전에 결합된 드라이브를 포함하는 드라이브에 사용할 수 없습니다.
134 0x0086 이미 결합된 드라이브에 JOIN이나 SUBST 명령을 사용하려고 했습니다.
135 0x0087 이미 대체된 드라이브에 JOIN이나 SUBST 명령을 사용하려고 했습니다.
136 0x0088 결합되지 않은 드라이브의 JOIN을 삭제하려고 했습니다.
137 0x0089 대체되지 않은 드라이브의 대체품을 삭제하려고 했습니다.
138 0x008A 결합된 드라이브의 디렉터리로 드라이브를 결합하려고 했습니다.
139 0x008B 대체된 드라이브의 디렉터리로 드라이브를 대체하려고 했습니다.
140 0x008C 대체된 드라이브의 디렉터리로 드라이브를 결합하려고 했습니다.
141 0x008D 결합된 드라이브의 디렉터리로 드라이브를 SUBST하려고 했습니다.
142 0x008E 지금 JOIN이나 SUBST를 수행할 수 없습니다.
143 0x008F 같은 드라이브의 디렉터리로 드라이브를 결합하거나 대체할 수 없습니다.
144 0x0090 루트 디렉터리의 하위 디렉터리가 아닙니다.
145 0x0091 디렉터리가 비어 있지 않습니다.
146 0x0092 지정한 경로가 대체용으로 사용 중입니다.
147 0x0093 사용할 수 있는 리소스가 부족하므로 이 명령을 처리할 수 없습니다.
148 0x0094 지금 지정한 경로를 사용할 수 없습니다.
149 0x0095 드라이브의 디렉터리가 이전 대체 대상인 드라이브를 결합하거나 대체하려고 했습니다.
150 0x0096 CONFIG.SYS 파일에 시스템 추적 정보가 지정되지 않았거나 추적이 허용되지 않습니다.
151 0x0097 DosMuxSemWait용으로 지정한 신호기 사건의 개수가 올바르지 않습니다.
152 0x0098 DosMuxSemWait가 실행되지 않았습니다. 너무 많은 신호기가 이미 설정되었습니다.
153 0x0099 DosMuxSemWait 목록이 올바르지 않습니다.
154 0x009A 입력한 디스크 이름이 대상 파일 시스템의 이름 한계를 넘었습니다.
155 0x009B 다른 스레드를 작성할 수 없습니다.
156 0x009C 수신측 프로세스에서 신호를 거부했습니다.
157 0x009D 세그먼트가 이미 삭제되었거나 잠글 수 없습니다.
158 0x009E 세그먼트가 이미 잠금이 해제되었습니다.
159 0x009F 스레드 ID의 주소가 올바르지 않습니다.
160 0x00A0 DosExecPgm에 전달된 인수 문자열이 올바르지 않습니다.
161 0x00A1 지정한 경로가 올바르지 않습니다.
162 0x00A2 신호가 이미 대기 중입니다.
164 0x00A4 시스템에서 더 이상의 스레드를 작성할 수 없습니다.
167 0x00A7 파일의 영역을 잠글 수 없습니다.
170 0x00AA 요청한 리소스가 사용 중입니다.
173 0x00AD 잠금 요청이 제공된 취소 영역에서 두드러지지 않습니다.
174 0x00AE 파일 시스템에서 잠금 유형의 자동 변경을 지원하지 않습니다.
180 0x00B4 올바르지 않은 세그먼트 번호가 검색되었습니다.
182 0x00B6 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
183 0x00B7 그 파일이 이미 존재하면 파일을 작성할 수 없습니다.
186 0x00BA 전달된 플래그가 올바르지 않습니다.
187 0x00BB 지정한 시스템 신호기 이름을 찾을 수 없습니다.
188 0x00BC 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
189 0x00BD 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
190 0x00BE 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
191 0x00BF Win32 모드에서 ? 프로그램을 실행할 수 없습니다.
192 0x00C0 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
193 0x00C1 ?은 올바른 Win32 응용 프로그램이 아닙니다.
194 0x00C2 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
195 0x00C3 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
196 0x00C4 운영 체제에서 이 응용 프로그램을 실행할 수 없습니다.
197 0x00C5 운영 체제가 현재 이 응용 프로그램을 실행하도록 구성되어 있지 않습니다.
198 0x00C6 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
199 0x00C7 운영 체제에서 이 응용 프로그램을 실행할 수 없습니다.
200 0x00C8 코드 세그먼트가 64KB 이상일 수 없습니다.
201 0x00C9 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
202 0x00CA 운영 체제에서 ? 프로그램을 실행할 수 없습니다.
203 0x00CB 입력한 환경 옵션을 찾을 수 없습니다.
205 0x00CD 명령 하위 트리에 신호 핸들러를 갖고 있는 프로세스가 없습니다.
206 0x00CE 파일 이름이나 확장명이 너무 깁니다.
207 0x00CF 링 2 스택이 사용 중입니다.
208 0x00D0 전역 파일 이름 문자, * 또는 ?가 잘못 입력되었거나 너무 많은 전역 파일 이름 문자가 지정되었습니다.
209 0x00D1 통지된 신호가 올바르지 않습니다.
210 0x00D2 신호 핸들러를 설정할 수 없습니다.
212 0x00D4 세그먼트가 잠겼으므로 다시 할당할 수 없습니다.
214 0x00D6 이 프로그램이나 동적 연결 모듈에 너무 많은 동적 연결 모듈이 부착되었습니다.
215 0x00D7 LoadModule로의 호출을 중첩할 수 없습니다.
230 0x00E6 파이프 상태가 올바르지 않습니다.
231 0x00E7 모든 파이프 인스턴스가 사용 중입니다.
232 0x00E8 파이프를 닫고 있습니다.
233 0x00E9 파이프의 다른 쪽 끝에 프로세스가 없습니다.
234 0x00EA 사용 가능한 데이터가 더 있습니다.
240 0x00F0 세션이 취소되었습니다.
254 0x00FE 지정한 확장된 속성 이름이 올바르지 않습니다.
255 0x00FF 확장된 속성에 일관성이 없습니다.
259 0x0103 사용 가능한 데이터가 더 이상 없습니다.
266 0x010A 복사 API를 사용할 수 없습니다.
267 0x010B 디렉터리 이름이 올바르지 않습니다.
275 0x0113 확장된 속성이 버퍼에 맞지 않습니다.
276 0x0114 탑재된 파일 시스템의 확장된 속성 파일이 손상되었습니다.
277 0x0115 확장된 속성표 파일이 가득 찼습니다.
278 0x0116 지정한 확장 속성 핸들이 올바르지 않습니다.
282 0x011A 탑재된 파일 시스템에서 확장된 속성을 지원하지 않습니다.
288 0x0120 호출자가 소유하지 않는 mutex를 해제하려고 했습니다.
298 0x012A 신호기에 너무 많이 통지했습니다.
299 0x012B Read/WriteProcessMemory 요청의 일부만 완료되었습니다.
317 0x013D ?용 메시지 파일에서 메시지 번호 0x?의 메시지를 찾을 수 없습니다.
487 0x01E7 잘못된 주소를 액세스하려고 했습니다.
534 0x0216 계산 결과가 32비트를 초과했습니다.
535 0x0217 파이프의 다른 쪽 끝에 프로세스가 있습니다.
536 0x0218 프로세스에서 파이프의 다른 쪽 끝을 열기를 기다리는 중입니다.
994 0x03E2 확장된 속성의 액세스가 거부되었습니다.
995 0x03E3 스레드 종료나 응용 프로그램 요청때문에 I/O 연산이 취소되었습니다.
996 0x03E4 중복된 I/O 사건에 대해 신호가 없습니다.
997 0x03E5 중복된 I/O 연산이 진행 중입니다.
998 0x03E6 메모리 위치의 액세스가 올바르지 않습니다.
999 0x03E7 Inpage 연산을 수행하는 중에 오류가 발생했습니다.
1001 0x03E9 되돌이 수준이 너무 깊어서 스택 오버플로가 발생했습니다.
1002 0x03EA 전송된 메시지에 대한 작업을 창에서 할 수 없습니다.
1003 0x03EB 이 함수를 완료할 수 없습니다.
1004 0x03EC 잘못된 플래그입니다.
1005 0x03ED 볼륨에 인식된 파일 시스템이 없습니다. 모든 필요한 파일 시스템 드라이버를 로드하였고
볼륨이 손상되지 않았는지 확인해 주십시오.
1006 0x03EE 파일의 볼륨이 표면상 변경되었으므로 열려진 파일은 더 이상 유효하지 않습니다
1007 0x03EF 전체 화면 모드에서 요청한 작업을 수행할 수 없습니다.
1008 0x03F0 존재하지 않는 토큰을 참조하려고 했습니다.
1009 0x03F1 구성 레지스트리 데이터베이스가 손상되었습니다.
1010 0x03F2 구성 레지스트리 키가 올바르지 않습니다.
1011 0x03F3 구성 레지스트리 키를 열 수 없습니다.
1012 0x03F4 구성 레지스트리 키를 읽을 수 없습니다.
1013 0x03F5 구성 레지스트리 키에 쓸 수 없습니다.
1014 0x03F6 레지스트리 데이터베이스의 파일 중 하나를 기록 또는 선택 복사를 사용하여 회복해야 할 경우였습니다. 회복이 완료되었습니다.
1015 0x03F7 레지스트리가 손상되었습니다.
레지스트리 데이터를 포함하는 파일 중 하나의 구조가 손상되었거나 메모리에 있는 파일의 시스템
이미지가 손상되었거나, 사본이나 로그 파일이 없거나 손상된 이유로 파일을 복구할 수 없습니다.
1016 0x03F8 레지스트리에서 초기화된 I/O 작업에 복구 불가능한 오류가 발생했습니다.
레지스트리의 시스템 이미지를 포함하는 파일 중의 하나를 읽거나 쓰거나 내용을 지우는 것이
불가능합니다.
1017 0x03F9 파일을 레지스트리로 로드하거나 복구하려고 했으나 지정한 파일이 레지스트리 파일 형식이 아닙니다.
1018 0x03FA 삭제 표시가 된 레지스트리 키에서 잘못된 연산을 하려고 했습니다.
1019 0x03FB 레지스트리 기록에 필요한 공간을 할당할 수 없습니다.
1020 0x03FC 이미 서브키나 값을 갖고 있는 레지스트리 키에 기호 연결을 작성할 수 없습니다.
1021 0x03FD 소멸성 상위 키 하에서 안정된 서브키를 작성할 수 없습니다.
1022 0x03FE 통지 변경 요청이 수행 중이며 그 정보가 호출자의 버퍼에 반환되지 않았습니다.
호출자는 지금 변경 사항을 알기 위해 파일을 이뉴머레이트할 필요가 있습니다.
1051 0x041B 정지 컨트롤이 다른 실행 중인 서비스가 의존하는 서비스로 전송되었습니다.
1052 0x041C 요청한 컨트롤이 이 서비스에 유효하지 않습니다.
1053 0x041D 서비스가 시작이나 컨트롤 요청에 적시에 반응하지 못했습니다.
1054 0x041E 서비스용으로 스레드를 작성할 수 없습니다.
1055 0x041F 서비스 데이터베이스가 잠겼습니다.
1056 0x0420 서비스의 인스턴스가 이미 실행 중입니다.
1057 0x0421 계정 이름이 올바르지 않거나 존재하지 않습니다.
1058 0x0422 지정한 서비스가 실행 불능 상태이거나 시작할 수 없습니다.
1059 0x0423 원형 서비스 종속성이 지정되었습니다.
1060 0x0424 지정한 서비스가 설치되어 있지 않습니다.
1061 0x0425 지금 서비스에서 컨트롤 메시지를 받아들일 수 없습니다.
1062 0x0426 서비스가 시작되지 않았습니다.
1063 0x0427 서비스 프로세스를 서비스 컨트롤러에 연결할 수 없습니다.
1064 0x0428 서비스에서 컨트롤 요청을 처리할 때 오류가 발생했습니다.
1065 0x0429 지정한 데이터베이스가 존재하지 않습니다.
1066 0x042A 서비스에서 서비스 고유의 오류 코드를 돌려주었습니다.
1067 0x042B 프로세스가 예기치 않게 종료되었습니다.
1068 0x042C 종속성 서비스나 그룹을 시작할 수 없습니다.
1069 0x042D 로그온할 수 없으므로 서비스를 시작할 수 없습니다.
1070 0x042E 시작한 후 서비스가 시작 대기 상태에 걸려 있습니다.
1071 0x042F 지정한 서비스 데이터베이스 잠금이 올바르지 않습니다.
1072 0x0430 지정한 서비스가 삭제 표시되었습니다.
1073 0x0431 지정한 서비스가 이미 존재합니다.
1074 0x0432 시스템이 현재 가장 좋은 시스템 구성으로 실행 중입니다.
1075 0x0433 종속성 서비스가 존재하지 않거나 삭제 표시되었습니다.
1076 0x0434 현재 시동은 `마지막으로 인식된 양호한 컨트롤 세트`로 사용하도록 받아들여졌습니다.
1077 0x0435 지난 시동 이후로 서비스를 시작하려는 시도가 없었습니다.
1078 0x0436 그 이름이 서비스 이름이나 서비스 디스플레이 이름으로 이미 사용 중입니다.
1100 0x044C 테이프의 실제 끝에 도달했습니다.
1101 0x044D 테이프 액세스가 파일 표시에 도달했습니다.
1102 0x044E 테이프의 앞부분이나 분할 영역에 도달했습니다.
1103 0x044F 테이프 액세스가 파일 세트의 끝에 도달했습니다.
1104 0x0450 테이프에 더 이상의 데이터가 없습니다.
1105 0x0451 테이프를 분할할 수 없습니다.
1106 0x0452 다중 볼륨 분할 영역을 가진 새 테이프에 액세스할 때 현재 블록 크기가 올바르지 않습니다.
1107 0x0453 테이프를 로드할 때 테이프 분할 영역 정보를 찾을 수 없습니다.
1108 0x0454 매체를 꺼내는 메카니즘을 잠글 수 없습니다.
1109 0x0455 매체의 적재를 해제할 수 없습니다.
1110 0x0456 드라이브의 매체가 변경되었을지도 모릅니다.
1111 0x0457 I/O 버스가 재설정되었습니다.
1112 0x0458 드라이브에 매체가 없습니다.
1113 0x0459 대상 멀티바이트 코드페이지에 Unicode 문자의 매핑이 없습니다.
1114 0x045A 동적 연결 라이브러리 (DLL) 초기화 루틴이 실패했습니다.
1115 0x045B 시스템 종료 중입니다.
1116 0x045C 시스템 종료 중이 아니므로 시스템 종료를 취소할 수 없습니다.
1117 0x045D I/O 장치 오류때문에 요청을 처리할 수 없습니다.
1118 0x045E 초기화가 완료된 직렬 장치가 없습니다. 직렬 드라이버의 로드가 해제됩니다.
1119 0x045F 다른 장치들과 인터럽트 요청(IRQ)을 공유 중이던 장치를 열 수 없습니다.
그 IRQ를 사용하는 다른 장치가 이미 하나 이상 열려 있습니다.
1120 0x0460 직렬 포트에 씀으로써 직렬 I/O 연산이 완료되었습니다.
(IOCTL_SERIAL_XOFF_COUNTER이 0에 도달했습니다.)
1121 0x0461 시간 초과 기간이 만료되어 직렬 I/O 연산이 완료되었습니다.
(IOCTL_SERIAL_XOFF_COUNTER이 0에 도달하지 않았습니다.)
1122 0x0462 플로피 디스크에서 ID 주소 표시를 찾을 수 없습니다.
1123 0x0463 플로피 섹터 ID 필드와 플로피 디스크 컨트롤러 트랙 주소가 일치하지 않습니다.
1124 0x0464 플로피 디스크 드라이버가 플로피 디스크 컨트롤러를 인식하지 못하는 오류가 보고되었습니다.
1125 0x0465 플로피 디스크 컨트롤러가 레지스터에 일관성이 없는 결과값을 돌려주었습니다.
1126 0x0466 하드디스크를 액세스하는 동안 위치 재조정 작업이 여러 번의 재시도에도 불구하고 실패하였습니다.
1127 0x0467 하드디스크를 액세스하는 동안 디스크 연산이 여러 번의 재시도에도 불구하고 실패하였습니다.
1128 0x0468 하드디스크를 액세스하는 동안 디스크 컨트롤러 재설정이 필요하였으나 실패하였습니다.
1129 0x0469 테이프의 실제 끝에 도달했습니다.
1130 0x046A 이 명령을 처리하는데 사용할 서버 저장 공간이 부족합니다.
1131 0x046B 잠재적 교착 조건이 검색되었습니다.
1132 0x046C 기본 주소나 지정된 파일 오프셋의 맞춤이 올바르지 않습니다.
1140 0x0474 다른 응용 프로그램이나 드라이버에서 시스템 전원 상태를 변경하지 못하게 했습니니다.
1141 0x0475 시스템 BIOS로 시스템 전원 상태를 변경하려고 했으나 실패했습니다.
1150 0x047E 지정한 프로그램에 새 버전의 Windows가 필요합니다.
1151 0x047F 지정한 프로그램이 Windows 또는 MS-DOS용 프로그램이 아닙니다.
1152 0x0480 지정한 프로그램의 인스턴스를 하나 이상 실행할 수 없습니다.
1153 0x0481 지정한 프로그램이 구 버전의 Windows에서 작성되었습니다.
1154 0x0482 이 응용 프로그램을 실행하는데 필요한 라이브러리 파일 중의 하나가 손상되었습니다.
1155 0x0483 지정한 파일로 이 작업을 할 수 있도록 연결된 프로그램이 없습니다.
1156 0x0484 응용 프로그램에 명령을 보내는 동안 오류가 발생했습니다.
1157 0x0485 이 응용 프로그램을 실행하는데 필요한 라이브러리 파일 중의 하나를 찾을 수 없습니다.
1200 0x04B0 지정한 장치 이름이 올바르지 않습니다.
1201 0x04B1 장치가 현재 연결되어 있지 않지만 연결을 기억하고 있습니다.
1202 0x04B2 이전에 기억된 적이 있는 장치를 기억하려고 했습니다.
1203 0x04B3 네트워크 공급자에서 네트워크 경로를 알 수 없습니다.
1204 0x04B4 지정한 네트워크 공급자 이름이 올바르지 않습니다.
1205 0x04B5 네트워크 연결 초기화 파일을 열 수 없습니다.
1206 0x04B6 네트워크 연결 초기화 파일이 손상되었습니다.
1207 0x04B7 컨테이너가 아닌 것을 이뉴머레이트할 수 없습니다.
1208 0x04B8 확장 오류가 발생했습니다.
1209 0x04B9 지정한 그룹 이름의 형식이 올바르지 않습니다.
1210 0x04BA 지정한 컴퓨터 이름의 형식이 올바르지 않습니다.
1211 0x04BB 지정한 사건 이름의 형식이 올바르지 않습니다.
1212 0x04BC 지정한 도메인 이름의 형식이 올바르지 않습니다.
1213 0x04BD 지정한 서비스 이름의 형식이 올바르지 않습니다.
1214 0x04BE 지정한 네트워크 이름의 형식이 올바르지 않습니다.
1215 0x04BF 지정한 공유 이름의 형식이 올바르지 않습니다.
1216 0x04C0 지정한 암호의 형식이 올바르지 않습니다.
1217 0x04C1 지정한 메시지 이름의 형식이 올바르지 않습니다.
1218 0x04C2 지정한 메시지 대상의 형식이 올바르지 않습니다.
1219 0x04C3 신용장이 기존의 신용장들과 충돌을 일으킵니다.
1220 0x04C4 네트워크 서버에 세션을 설정하려고 했으나 이미 그 서버에 너무 많은 세션이 설정되어 있습니다.
1221 0x04C5 워크그룹 또는 도메인 이름이 이미 네트워크상의 다른 컴퓨터에서 사용중입니다.
1222 0x04C6 네트워크가 없거나 시작되지 않았습니다.
1223 0x04C7 사용자가 작업을 취소했습니다.
1224 0x04C8 사용자 매핑 섹션이 열려 있는 파일에서 요청한 작업을 수행할 수 없습니다.
1225 0x04C9 원격 시스템에서 네트워크 연결을 거부했습니다.
1226 0x04CA 네트워크 연결이 닫혔습니다.
1227 0x04CB 네트워크 전송 끝점이 이미 그것과 연결된 주소를 갖고 있습니다.
1228 0x04CC 주소가 아직 네트워크 끝점과 연결되지 않았습니다.
1229 0x04CD 존재하지 않는 네트워크 연결에서 작업이 시도되었습니다.
1230 0x04CE 활성 네트워크 연결에서 잘못된 작업이 시도되었습니다.
1231 0x04CF 원격 네트워크에 전송할 수 없습니다.
1232 0x04D0 원격 시스템에 전송할 수 없습니다.
1233 0x04D1 원격 시스템에서 전송 프로토콜을 지원하지 않습니다.
1234 0x04D2 원격 시스템의 대상 네트워크 끝점에 실행중인 서비스가 없습니다.
1235 0x04D3 요청이 취소되었습니다.
1236 0x04D4 네트워크 연결이 지역 시스템에서 취소되었습니다.
1237 0x04D5 작업을 완료할 수 없습니다. 재시도하십시오.
1238 0x04D6 이 계정에 동시에 연결할 수 있는 개수의 한계를 초과했으므로 서버에 더 연결할 수 없습니다
1239 0x04D7 허용되지 않는 시간에 이 계정에 로그인 하려고 했습니다.
1240 0x04D8 이 국에서 그 계정에 로그인할 수 없습니다.
1241 0x04D9 네트워크 주소를 요청한 작업에 사용할 수 없습니다.
1242 0x04DA 서비스가 이미 등록되었습니다.
1243 0x04DB 지정한 서비스가 존재하지 않습니다.
1244 0x04DC 사용자에게 권한이 없으므로 요청한 작업을 수행할 수 없습니다.
1245 0x04DD 사용자가 네트워크에 로그온하지 않았으므로 요청한 작업을 할 수 없습니다. 지정한 서비스가 존재하지 않습니다.
1246 0x04DE 처리중인 작업을 계속하기 위해 호출기를 필요로 하는 것을 되돌립니다.
1247 0x04DF 초기화가 이미 완료되었을 때 초기화 작업을 수행하려고 했습니다.
1248 0x04E0 지역 장치가 더 이상 없습니다.
1300 0x0514 참조되는 모든 특권이 호출자에게 지정되어 있지는 않습니다.
1301 0x0515 계정 이름과 시스템 보안 ID간의 일부 매핑이 완료되지 않았습니다.
1302 0x0516 이 계정에 특정하게 설정되어 있는 시스템 할당량 제한이 없습니다.
1303 0x0517 사용 가능한 암호화 키가 없습니다. 잘 알려진 암호화 키가 리턴되었습니다.
1304 0x0518 NT 암호가 너무 복잡하여 LAN Manager 암호로 변환할 수 없습니다.
리턴된 LAN Manager 암호가 NULL 문자열입니다.
1305 0x0519 수정 수준을 알 수 없습니다.
1306 0x051A 두 수정 수준이 호환되지 않습니다.
1307 0x051B 이 시스템 보안 ID가 이 개체의 소유자로서 지정되지 않을지도 모릅니다.
1308 0x051C 이 시스템 보안 ID가 개체의 주 그룹으로서 지정되지 않을지도 모릅니다.
1309 0x051D 현재 클라이언트를 의인화하고 있지 않은 스레드를 이용하여 의인화 토큰 방식으로 작업하려고 했습니다.
1310 0x051E 그룹을 사용할 수 없을지도 모릅니다.
1311 0x051F 로그온 요청을 처리하는 데 사용할 수 있는 로그온 서버가 현재 없습니다.
1312 0x0520 지정한 로그온 세션이 존재하지 않습니다. 이미 종료되었을지도 모릅니다.
1313 0x0521 지정한 특권이 존재하지 않습니다.
1314 0x0522 요청한 특권을 클라이언트가 갖고 있지 않습니다.
1315 0x0523 제공한 이름이 올바르게 형성된 계정 이름이 아닙니다.
1316 0x0524 지정한 사용자가 이미 존재합니다.
1317 0x0525 지정한 사용자가 존재하지 않습니다.
1318 0x0526 지정한 그룹이 이미 존재합니다.
1319 0x0527 지정한 그룹이 존재하지 않습니다.
1320 0x0528 지정한 사용자 계정이 이미 지정한 그룹의 구성원이거나, 지정한 그룹에 구성원이 있어서
삭제할 수 없습니다.
1321 0x0529 지정한 사용자 계정이 지정한 그룹 계정의 구성원이 아닙니다.
1322 0x052A 마지막 남은 관리 계정을 사용 불능 상태로 하거나 삭제할 수 없습니다.
1323 0x052B 암호를 업데이트할 수 없습니다. 현재 암호로 제공된 값이 올바르지 않습니다.
1324 0x052C 암호를 업데이트할 수 없습니다. 새 암호로 제공된 값이 암호에 사용할 수 없는 문자를 포함합니다.
1325 0x052D 암호 업데이트 규칙을 위반했으므로 암호를 업데이트할 수 없습니다.
1326 0x052E 로그온할 수 없음: 사용자 이름을 알 수 없거나 암호가 틀립니다.
1327 0x052F 로그온할 수 없음: 사용자 계정 한계.
1328 0x0530 로그온할 수 없음: 계정 로그온 시간 한계 위반
1329 0x0531 로그온할 수 없음: 이 컴퓨터에 로그온할 수 없는 사용자입니다.
1330 0x0532 로그온할 수 없음: 지정한 계정 암호 사용 기간이 만료되었습니다.
1331 0x0533 로그온할 수 없음: 계정이 현재 사용할 수 없는 상태입니다.
1332 0x0534 계정 이름과 시스템 보안 ID간에 매핑이 되지 않았습니다.
1333 0x0535 한번에 너무 많은 지역 사용자 식별자(LUID)를 요청했습니다.
1334 0x0536 사용 가능한 지역 사용자 식별자(LUID)가 더 이상 없습니다.
1335 0x0537 시스템 보안 ID의 부인증 부분이 이 특별 사용에 적합하지 않습니다.
1336 0x0538 액세스 컨트롤 목록(ACL) 구조가 올바르지 않습니다.
1337 0x0539 시스템 보안 ID 구조가 올바르지 않습니다.
1338 0x053A 시스템 보안 기술자 구조가 올바르지 않습니다.
1340 0x053C 상속된 액세스 컨트롤 목록(ACL)이나 액세스 컨트롤 항목(ACE)를 작성할 수 없습니다.
1341 0x053D 서버가 현재 사용불능 상태입니다.
1342 0x053E 서버가 현재 사용가능 상태입니다.
1343 0x053F 제공된 값이 식별자 인증에 부적합합니다.
1344 0x0540 시스템 보안 정보의 업데이트에 필요한 메모리가 더 이상 없습니다.
1345 0x0541 지정한 속성이 올바르지 않거나 전체적으로 그룹의 속성과 호환되지 않습니다.
1346 0x0542 의인화 수준이 올바르지 않거나 제공한 내용이 올바르지 않습니다.
1347 0x0543 익명 수준의 시스템 보안 토큰을 열 수 없습니다.
1348 0x0544 요청한 확인 정보 클래스가 올바르지 않습니다.
1349 0x0545 토큰의 종류가 사용 목적에 부적합합니다.
1350 0x0546 연결된 시스템 보안이 없는 개체에서 시스템 보안 작업을 수행할 수 없습니다.
1351 0x0547 Windows NT 서버에 연락할 수 없거나 도메인 내의 개체가 필요한 정보를 검색당하지 않도록
보호되고 있습니다.
1352 0x0548 시스템 보안 계정 관리자(SAM)나 지역 시스템 보안 권한(LSA) 서버가 시스템 보안 작업을 수행하기에
부적절한 상태에 있습니다.
1353 0x0549 시스템 보안 작업을 수행하기에 도메인의 상태가 부적절합니다.
1354 0x054A 이 작업은 도메인의 주 도메인 컨트롤러에서만 할 수 있습니다.
1355 0x054B 지정한 도메인이 존재하지 않습니다.
1356 0x054C 지정한 도메인이 이미 존재합니다.
1357 0x054D 서버 당 도메인 수의 한계를 초과하려고 했습니다.
1358 0x054E 심각한 매체 오류나 디스크상의 데이터 구조 손상때문에 요청한 작업을 완료할 수 없습니다.
1359 0x054F 시스템 보안 계정 데이터베이스에 내부적인 불일치가 있습니다.
1360 0x0550 일반 액세스 종류가 이미 비일반 종류에 매핑되어야 하는 액세스 마스크에 포함되어 있습니다.
1361 0x0551 시스템 보안 기술자의 형식이 올바르지 않습니다(절대적 또는 자기 상대적).
1362 0x0552 요청한 작업을 로그온 과정에서만 수행할 수 있습니다.
호출 과정이 로그온 과정으로 등록되지 않았습니다.
1363 0x0553 이미 사용중인 ID로 새 로그온 세션을 시작할 수 없습니다.
1364 0x0554 지정한 인증 패키지를 알 수 없습니다.
1365 0x0555 로그온 세션이 요청한 작업과 일치하는 상태에 있지 않습니다.
1366 0x0556 로그온 세션 ID가 이미 사용 중입니다.
1367 0x0557 로그온 요청에 잘못된 로그온 유형 값이 있습니다.
1368 0x0558 파이프에서 데이터를 읽기 전까지 이름 파이프를 통해 의인화가 불가능합니다.
1369 0x0559 레지스트리 하위 트리의 트랜잭션 상태가 요청한 작업과 호환되지 않습니다.
1370 0x055A 내부 시스템 보안 데이터베이스가 손상되었습니다.
1371 0x055B 제공된 계정에서 이 작업을 수행할 수 없습니다.
1372 0x055C 제공된 특별 그룹에서 이 작업을 수행할 수 없습니다.
1373 0x055D 제공된 특별 사용자에서 이 작업을 수행할 수 없습니다.
1374 0x055E 그룹이 현재 사용자의 주 그룹이므로 그룹에서 사용자를 제거할 수 없습니다.
1375 0x055F 기본 토큰에서 이미 이 토큰을 사용 중입니다.
1376 0x0560 지정한 지역 그룹이 존재하지 않습니다.
1377 0x0561 지정한 계정 이름이 지역 그룹의 구성원이 아닙니다.
1378 0x0562 지정한 계정 이름이 이미 지역 그룹의 구성원입니다.
1379 0x0563 지정한 지역 그룹이 이미 존재합니다.
1380 0x0564 로그온할 수 없음: 사용자가 이 컴퓨터에서 요청한 로그온 유형을 받지 못했습니다.
1381 0x0565 단일 시스템에 저장할 수 있는 기밀의 최대 개수를 초과했습니다.
1382 0x0566 기밀의 길이가 허용되는 최대 길이를 초과했습니다.
1383 0x0567 지역 시스템 보안 권한 데이터베이스에 내부 불일치가 있습니다.
1384 0x0568 로그온하려는 동안 사용자의 시스템 보안 환경에 너무 많은 시스템 보안 ID가 쌓였습니다.
1385 0x0569 로그온할 수 없음: 사용자가 이 컴퓨터에서 요청한 로그온 종류를 받지 못했습니다.
1386 0x056A 사용자 암호를 변경하는데 교차 암호화된 암호가 필요합니다.
1387 0x056B 구성원이 존재하지 않으므로 새 구성원을 지역 그룹에 없습니다.
1388 0x056C 구성원이 잘못된 계정 종류를 가지므로 지역 그룹에 추가할 수 없습니다.
1389 0x056D 너무 많은 시스템 보안 ID가 지정되었습니다.
1390 0x056E 이 사용자 암호를 변경하려면 교차 암호화된 암호가 필요합니다.
1391 0x056F ACL에 상속 가능한 구성요소가 없습니다.
1392 0x0570 파일이나 디렉터리가 손상되었으므로 읽을 수 없습니다.
1393 0x0571 디스크 구조가 손상되었으므로 읽을 수 없습니다.
1394 0x0572 지정한 로그온 세션에 사용자 세션 키가 없습니다.
1395 0x0573 액세스 중인 서비스는 특정 수의 연결에만 사용할 수 있습니다.
서비스에서 허용하는 연결 수에 이미 도달했으므로 더 이상 연결할 수 없습니다.
1400 0x0578 잘못된 창 핸들입니다.
1401 0x0579 잘못된 메뉴 핸들입니다.
1402 0x057A 잘못된 커서 핸들입니다.
1403 0x057B 잘못된 바로 가는 키 표 핸들입니다.
1404 0x057C 잘못된 후크 핸들입니다.
1405 0x057D 다중 창 위치 구조에 부적합한 핸들입니다.
1406 0x057E 최상위 수준의 하위 창을 작성할 수 없습니다.
1407 0x057F 창 클래스를 찾을 수 없습니다.
1408 0x0580 다른 스레드에 속한 잘못된 창입니다.
1409 0x0581 바로 가는 키가 이미 등록되었습니다.
1410 0x0582 이미 존재하는 클래스입니다.
1411 0x0583 존재하지 않는 클래스입니다.
1412 0x0584 클래스에 여전이 열려 있는 창이 있습니다.
1413 0x0585 잘못된 색인입니다.
1414 0x0586 잘못된 아이콘 핸들입니다.
1415 0x0587 개인 DIALOG 창 단어를 이용 중입니다.
1416 0x0588 목록 식별자를 찾을 수 없습니다.
1417 0x0589 대표 문자를 찾을 수 없습니다.
1418 0x058A 스레드에 열려 있는 클립보드가 없습니다.
1419 0x058B 바로 가는 키가 등록되어 있지 않습니다.
1420 0x058C 올바른 대화 창이 아닙니다.
1421 0x058D 컨트롤 ID를 찾을 수 없습니다.
1422 0x058E 편집 컨트롤 기능이 없으므로 명령 실행 상자에 부적절한 메시지입니다.
1423 0x058F 창이 명령 실행 상자가 아닙니다.
1424 0x0590 높이가 256보다 작아야 합니다.
1425 0x0591 잘못된 장치 환경 (DC) 핸들입니다.
1426 0x0592 잘못된 후크 프로시저 종류입니다.
1427 0x0593 잘못된 후크 프로시져입니다.
1428 0x0594 모듈 핸들 없이 지역 후크가 아닌 후크를 설정할 수 없습니다.
1429 0x0595 이 후크 프로시저는 전역으로만 설정가능합니다.
1430 0x0596 저널 후크 프로시저가 이미 설치되었습니다.
1431 0x0597 후크 프로시저가 설치되어 있지 않습니다.
1432 0x0598 단일 선택 목록에 부적합한 메시지입니다.
1433 0x0599 LB_SETCOUNT가 비지연 목록에 전송되었습니다.
1434 0x059A 이 목록에서는 탭 정지를 지원하지 않습니다.
1435 0x059B 다른 스레드에서 작성한 개체를 삭제할 수 없습니다.
1436 0x059C 하위 창에서 메뉴를 가질 수 없습니다.
1437 0x059D 창에 시스템 메뉴를 가질 수 없습니다.
1438 0x059E 잘못된 메시지 상자 유형입니다.
1439 0x059F 잘못된 시스템 범위의 (SPI_*) 매개 변수입니다.
1440 0x05A0 화면이 이미 잠겨졌습니다.
1441 0x05A1 다중 창 위치 구조에서 창의 모든 핸들은 같은 상위 핸들을 가져야 합니다.
1442 0x05A2 하위 창이 아닙니다.
1443 0x05A3 잘못된 GW_* 명령입니다.
1444 0x05A4 잘못된 스레드 식별자입니다.
1445 0x05A5 다중 문서 인터페이스(MDI) 창이 아닌 창으로부터 메시지를 처리할 수 없습니다.
1446 0x05A6 돌출 메뉴가 이미 실행중입니다.
1447 0x05A7 창에 스크롤 막대가 없습니다.
1448 0x05A8 스크롤 막대 범위는 0x7FFF보다 클 수 없습니다.
1449 0x05A9 지정한 방식으로 창을 표시하거나 제거할 수 없습니다.
1450 0x05AA 시스템 리소스가 부족하여 요청한 서비스를 완료할 수 없습니다.
1451 0x05AB 시스템 리소스가 부족하여 요청한 서비스를 완료할 수 없습니다.
1452 0x05AC 시스템 리소스가 부족하여 요청한 서비스를 완료할 수 없습니다.
1453 0x05AD 할당된 리소스가 부족하여 요청한 서비스를 완료할 수 없습니다.
1454 0x05AE 할당된 리소스가 부족하여 요청한 서비스를 완료할 수 없습니다.
1455 0x05AF 페이징 파일이 너무 작아서 이 작업을 완료할 수 없습니다.
1456 0x05B0 메뉴 항목을 찾을 수 없습니다.
1500 0x05DC 이벤트 로그 파일이 손상되었습니다.
1501 0x05DD 열 수 있는 이벤트 로그 파일이 없으므로 사건 기록 서비스를 실행할 수 없습니다.
1502 0x05DE 이벤트 로그 파일이 가득 찼습니다.
1503 0x05DF 이벤트 로그 파일이 읽는 동안 변경되었습니다.
1700 0x06A4 문자열 바인딩이 올바르지 않습니다.
1701 0x06A5 바인딩 핸들의 종류가 올바르지 않습니다.
1702 0x06A6 바인딩 핸들이 올바르지 않습니다.
1703 0x06A7 RPC 프로토콜 시퀀스가 지원되지 않습니다.
1704 0x06A8 RPC 프로토콜 시퀀스가 올바르지 않습니다.
1705 0x06A9 문자열의 범용 유일 식별자(UUID)가 올바르지 않습니다.
1706 0x06AA 끝점 형식이 올바르지 않습니다.
1707 0x06AB 네트워크 주소가 올바르지 않습니다.
1708 0x06AC 끝점을 찾을 수 없습니다.
1709 0x06AD 시간 초과 값이 올바르지 않습니다.
1710 0x06AE 개체의 범용 유일 식별자(UUID)를 찾을 수 없습니다.
1711 0x06AF 개체의 범용 유일 식별자(UUID)가 이미 등록되었습니다.
1712 0x06B0 유형의 범용 유일 식별자(UUID)가 이미 등록되었습니다.
1713 0x06B1 RPC 서버가 이미 듣고 있습니다.
1714 0x06B2 등록된 프로토콜 시퀀스가 없습니다.
1715 0x06B3 RPC 서버가 듣고 있지 않습니다.
1716 0x06B4 관리자 유형을 알 수 없습니다.
1717 0x06B5 인터페이스를 알 수 없습니다.
1718 0x06B6 바인딩이 없습니다.
1719 0x06B7 프로토콜 시퀀스가 없습니다.
1720 0x06B8 끝점을 작성할 수 없습니다.
1721 0x06B9 이 작업을 완료하는 데 사용할 리소스가 부족합니다.
1722 0x06BA RPC 서버를 사용할 수 없습니다.
1723 0x06BB RPC 서버가 너무 바빠서 이 작업을 완료할 수 없습니다.
1724 0x06BC 네트워크 옵션이 올바르지 않습니다.
1725 0x06BD 이 스레드에 활성 상태의 원격 프로시저 호출이 없습니다.
1726 0x06BE 원격 프로시저 호출을 할 수 없습니다.
1727 0x06BF 원격 프로시저 호출을 할 수 없으므로 실행되지 않았습니다.
1728 0x06C0 원격 프로시저 호출(RPC) 프로토콜 오류가 발생했습니다.
1730 0x06C2 RPC 서버에서 지원하지 않는 전송 구문입니다.
1732 0x06C4 지원되지 않는 범용 유일 식별자(UUID) 종류입니다.
1733 0x06C5 태그가 올바르지 않습니다.
1734 0x06C6 배열 한계 값이 올바르지 않습니다.
1735 0x06C7 바인딩에 항목 이름이 없습니다.
1736 0x06C8 이름 구문이 올바르지 않습니다.
1737 0x06C9 지원되지 않는 이름 구문입니다.
1739 0x06CB 범용 유일 식별자(UUID)를 작성하는 데 사용할 수 있는 네트워크 주소가 없습니다.
1740 0x06CC 끝점이 중복되었습니다.
1741 0x06CD 알 수 없는 인증 유형입니다.
1742 0x06CE 호출의 최대 횟수가 너무 작습니다.
1743 0x06CF 문자열이 너무 깁니다.
1744 0x06D0 RPC 프로토콜 시퀀스를 찾을 수 없습니다.
1745 0x06D1 프로시저 개수가 범위를 벗어났습니다.
1746 0x06D2 바인딩에 인증 정보가 없습니다.
1747 0x06D3 알 수 없는 인증 서비스입니다.
1748 0x06D4 인증 수준을 알 수 없습니다.
1749 0x06D5 시스템 보안 환경이 올바르지 않습니다.
1750 0x06D6 알 수 없는 인증 서비스입니다.
1751 0x06D7 항목이 올바르지 않습니다.
1752 0x06D8 서버의 끝점에서 작업을 수행할 수 없습니다.
1753 0x06D9 끝점 매퍼에서 사용 가능한 더 이상의 끝점이 없습니다.
1754 0x06DA 저장된 인터페이스가 없습니다.
1755 0x06DB 항목 이름이 불완전합니다.
1756 0x06DC 버전 옵션이 올바르지 않습니다.
1757 0x06DD 더 이상의 구성원이 없습니다.
1758 0x06DE 저장을 해제할 대상이 없습니다.
1759 0x06DF 인터페이스를 찾을 수 없습니다.
1760 0x06E0 항목이 이미 존재합니다.
1761 0x06E1 항목을 찾을 수 없습니다.
1762 0x06E2 이름 서비스를 사용할 수 없습니다.
1763 0x06E3 네트워크 주소 패밀리가 올바르지 않습니다.
1764 0x06E4 요청한 작업이 지원되지 않습니다.
1765 0x06E5 의인화하는데 시스템 보안 환경을 사용할 수 없습니다.
1766 0x06E6 원격 프로시저 호출(RPC)에서 내부 오류가 발생했습니다.
1767 0x06E7 RPC 서버에서 정수를 0으로 나누려고 했습니다.
1768 0x06E8 RPC 서버에서 주소 지정 오류가 발생했습니다.
1769 0x06E9 RPC 서버에서 0으로 나누는 부동 소수점 연산이 있었습니다.
1770 0x06EA RPC 서버에서 부동 소수점 언더플로가 발생했습니다.
1771 0x06EB RPC 서버에서 부동 소수점 오버플로가 발생했습니다.
1772 0x06EC 자동 핸들의 바인딩에 사용할 수 있는 RPC 서버 목록을 다 써버렸습니다.
1773 0x06ED 문자 번역표 파일을 열 수 없습니다.
1774 0x06EE 문자 번역표가 수록되어 있는 파일의 바이트 수가 512보다 적습니다.
1775 0x06EF 원격 프로시저 호출동안 클라이언트로부터 호스트로 널 컨텍스트 핸들이 전달되었습니다.
1777 0x06F1 원격 프로시저 호출동안 컨텍스트 핸들이 변경되었습니다.
1778 0x06F2 원격 프로시저 호출로 전달된 바인딩 핸들이 일치하지 않습니다.
1779 0x06F3 스터브에서 원격 프로시저 호출 핸들을 가져올 수 없습니다.
1772 0x06F4 널 참조 포인터가 스터브에 전달되었습니다.
1781 0x06F5 정리 값이 범위를 벗어났습니다.
1782 0x06F6 바이트 수가 너무 작습니다.
1783 0x06F7 스터브에 불량 데이터가 수신되었습니다.
1784 0x06F8 공급된 사용자 버퍼가 요청한 작업에 부적합합니다.
1785 0x06F9 디스크 매체를 인식할 수 없습니다. 포맷되지 않은 것같습니다.
1786 0x06FA 워크스테이션에 신뢰성 있는 기밀이 없습니다.
1787 0x06FB Windows NT Server의 SAM 데이터베이스에 이 워크스테이션의 신뢰성 있는 관계를 위한 컴퓨터
계정이 없습니다.
1788 0x06FC 주 도메인과 신뢰성 있는 도메인 간에 신뢰성 있는 관계를 설정할 수 없습니다.
1789 0x06FD 이 워크스테이션과 주 도메인 간에 신뢰성 있는 관계를 가질 수 없습니다.
1790 0x06FE 네트워크 로그인 할 수 없습니다.
1791 0x06FF 이 스레드에 대한 원격 프로시저 호출이 이미 진행주입니다.
1792 0x0700 로그온을 시도했지만 네트워크 로그온 서비스가 시작하지 않았습니다.
1793 0x0701 사용자의 계정이 만료되었습니다.
1794 0x0702 네트워크 재지정이 사용 중이므로 해제할 수 없습니다.
1795 0x0703 지정한 프린터 드라이버가 이미 설치되었습니다.
1796 0x0704 지정한 포트는 알 수 없는 포트입니다.
1797 0x0705 알려지지 않은 프린터 드라이버입니다.
1798 0x0706 인쇄 프로세서가 알 수 없는 것입니다.
1799 0x0707 지정한 분리자 파일이 잘못되었습니다.
1800 0x0708 지정한 우선순위가 잘못되었습니다.
1801 0x0709 프린터 이름이 잘못되었습니다.
1802 0x070A 프린터가 이미 존재합니다.
1803 0x070B 프린터 명령이 잘못되었습니다.
1804 0x070C 지정한 데이터 형식이 잘못되었습니다.
1805 0x070D 지정한 환경이 잘못되었습니다.
1806 0x070E 바인딩이 더 이상 없습니다.
1807 0x070F 사용된 계정이 도메인 상호 신탁 계정입니다. 전역 사용자 계정이나 지역 사용자 계정을 사용해서
서버에 액세스하십시오.
1808 0x0710 사용한 계정이 컴퓨터 계정입니다. 전역 사용자 계정이나 지역 사용자 계정을 사용하여 서버에
액세스하십시오.
1809 0x0711 사용한 계정이 서버 신탁 계정입니다. 전역 사용자 계정이나 지역 사용자 계정을 사용하여 서버에
액세스하십시오.
1810 0x0712 지정한 도메인의 이름이나 시스템 보안 ID (SID)가 해당 도메인의 신탁 정보와 일치하지 않습니다.
1811 0x0713 서버가 사용 중이며 언로드할 수 없습니다.
1812 0x0714 지정한 이미지 파일에 리소스 영역이 없습니다.
1813 0x0715 지정한 리소스 형식을 이미지 파일에서 찾을 수 없습니다.
1814 0x0716 지정한 리소스 이름을 이미지 파일에서 찾을 수 없습니다.
1815 0x0717 지정한 리소스 언어 ID를 이미지 파일에서 찾을 수 없습니다.
1816 0x0718 할당된 리소스가 부족하여 이 명령을 처리할 수 없습니다.
1817 0x0719 등록된 인터페이스가 없습니다.
1818 0x071A 호출을 처리하는 과정에서 서버가 수정되었습니다.
1819 0x071B 바인딩 핸들에 필요한 정보 중 일부가 없습니다.
1820 0x071C 통신 오류.
1821 0x071D 요청한 인증 단계가 지원되지 않습니다.
1822 0x071E 주요 이름이 등록되지 않았습니다.
1823 0x071F 지정한 오류는 올바른 Windows RPC 오류 코드가 아닙니다.
1824 0x0720 이 컴퓨터에서만 유효한 UUID가 할당되었습니다.
1825 0x0721 보안 패키지 특정 오류가 발생했습니다.
1826 0x0722 스레드가 취소되지 않았습니다.
1827 0x0723 인코딩/디코딩 핸들에서 잘못된 작동이 발생했습니다.
1828 0x0724 일련의 순차적인 패키지 중 호환되지 않는 버전입니다.
1829 0x0725 RPC 중 호환되지 않는 버전입니다.
1898 0x076A 그룹 멤버를 찾을 수 없습니다.
1899 0x076B 엔드포인트 매퍼 데이터베이스를 작성할 수 없습니다.
1900 0x076C 개체 일반 고유 식별자(UUID)에 아무런 값이 없습니다.
1901 0x076D 지정한 시간이 잘못되었습니다.
1902 0x076E 지정한 폼 이름이 잘못되었습니다.
1903 0x076F 지정한 폼 크기가 잘못되었습니다.
1904 0x0770 지정한 프린터 핸들이 이미 대기중입니다.
1905 0x0771 지정한 프린터가 삭제되었습니다.
1906 0x0772 프린터의 상태가 올바르지 않습니다.
1907 0x0773 최초로 로그온하기 전에 사용자 암호를 바꾸어야 합니다.
1908 0x0774 이 도메인에 대한 도메인 컨트롤러를 찾을 수 없습니다.
1909 0x0775 참조 계정이 현재 잠겨 있어서 로그온할 수 없습니다.
2000 0x07D0 픽셀 포맷이 올바르지 않습니다.
2001 0x07D1 지정한 드라이버가 올바르지 않습니다.
2002 0x07D2 창 모양 또는 클래스 속성이 이 작업에 올바르지 않습니다.
2003 0x07D3 요청한 메타파일 작업은 지원하지 않습니다.
2004 0x07D4 요청한 변환작업은 지원하지 않습니다.
2005 0x07D5 요청한 자르기 작업은 지원하지 않습니다.
2202 0x089A 지정한 사용자 이름이 올바르지 않습니다.
2250 0x08CA 네트워크 연결이 없습니다.
2401 0x0961 네트워크 연결에 얼려 있는 파일이 있거나 처리되지 않은 요청이 있습니다.
2402 0x0962 사용중인 연결이 아직 있습니다.
2404 0x0964 장치가 활성 프로세서에서 사용 중이며 연결 해제할 수 없습니다.
3000 0x0BB8 지정한 인쇄 모니터를 알 수 없습니다.
3001 0x0BB9 지정한 프린터 드라이버가 현재 사용중입니다.
3002 0x0BBA 스풀 파일을 찾을 수 없습니다.
3003 0x0BBB StartDocPrinter 호출이 사용되지 않았습니다.
3004 0x0BBC AddJob 호출이 사용되지 않았습니다.
3005 0x0BBD 지정한 인쇄 프로세서가 이미 설치되었습니다.
3006 0x0BBE 지정한 인쇄 모니터가 이미 설치되었습니다.
4000 0x0FA0 명령을 처리하는 동안에 WINS에서 오류가 발생했습니다.
4001 0x0FA1 지역 WINS를 삭제할 수 없습니다.
4002 0x0FA2 파일로부터 들여오기 작업이 실패했습니다.
4003 0x0FA3 백업을 실패했습니다. 이전에 전체 백업을 하셨습니까?
4004 0x0FA4 백업을 실패했습니다. 데이터베이스를 백업한 디렉터리를 확인해 보십시오.
4005 0x0FA5 WINS 데이터베이스에 이 이름이 없습니다.
4006 0x0FA6 구성되지 않은 파트너를 갖는 이중화는 사용할 수 없습니다.
6118 0x17E6 이 작업 그룹의 서버 목록을 현재 사용할 수 없습니다. 


      
Posted by k_ben


일단 "스키마"라는 뜻은 개요, 대요, 윤관,도표 등등으로 사전적 의미가 있는데요
DB에서는 DB를 논리적으로 정의한 것을 나타내는 하나의 전문용어로서 원어 그대로 사용된답니다.

좀 상세하게 설명하자면 스키마는 개체의 특성을 나타내는 속성과 속성들의 집합으로 이루어진 개채, 개채사이에 존재하는 관계에 대한 정의와 이들이 유지해야 될 제약조건들을 기술한겁니다..
한마디로 말하자면.. DB에 어떤 구조로 데이터가 저장되는가를 나타낸것. 즉
"데이터베이스 구조를 스키마 라고합니다"
이런 스키마는 DB를 관리하거나 운용하는데 매우중요해 데이터사전에 저장되죠.
또 각 스키마 사이에는 사상(Mapping)이 성립되어 외부스키마와 개념스키마 사이에는 외부/개념 사상이 이루어지고 개념스키마와 내부 스키마 사이에는 개념/내부
사상이 이루어지며 데이터의 논리적 독립성 및 물리적 독립성을 구현하는데 아주 중요한 역할을 수행하게 된답니다


각 스키마로 들어가 볼까요^^?

외부스키마 - DB전체중에서 개개 사용자나 응용 P/G 에서 필요로 하는 개채와 관계에 대해서 정의한 것을 외부스키마라 한답니다
때로는 전체DB의 논리적 일부분이 된다는 의미에서 서브스키마 또는 DB를 들여다
보는 창이라는 의미에서 View 라고도 합니다..
따라서 사용자의 수나 응용 P/G의 수만큼 많은 외부 스키마가 존재할수 있구요 이를통해 DB에 접근할 수 있게되므로 결국 외부 스키마는 DB에 대한 외부로부터의 접근 통로구실을 하게됩니다..

개념스키마 - 조직체 전체를 관장하는 입잡에서 DB를 정의한 것입니다..
따라서 조직페의 모든 용용 시스템에서 필요로 하는 모든 개체,관계 그리고
제약조건들을 포함해야 하구요 DB를 효율적으로 관리하는데 필요한 접근권한, 보안정책, 무결성 규칙등에 관한 사항들도 추가적으로 포함되기도 하거든요..
그래서 경우에 따라서는 이개념스키마 라는녀석을 그냥 "스키마"라고 부르기도해요
근데 개념스키마는 DB전체에 대해 기술한 것이기때문에 유일할 수 밖에 없습니다
즉~~!! 딱 하나뿐이죠~ Only One~


내부스키마 - 물리적 저장장치의 입장에서 DB가 저장되는 방법을 기술한것입니다
구체적으로는 개념 스키마를 디스크 기억장치에 물리적으로 구현하기 위한 방법을
기술한 것으로서 그 주된내용은 실제로 저장될 내부 레코드의 형식, 내부레코드의
물리적 순서, 인덱스의 유/무 등에 관한것입니다..
하지만 실제의 DB는 내부 스키마에 의해 곧바로 구현되는 것이 아니라 내부 스키마에서 기술한 내용에따라 운영체제의 파일 시스템에 의해 물리적 저장장치에 기록되는 것입니다..
실무적으로는 내부 스키마에 의해 DV의 실행속도가 결정적으로 영향을 받기때문에
DB의 구축목적에 따라 내부 스키마를 결정해야 할 필요가 있답니다....


      
Posted by k_ben


개념..(네이버에 어떤분이 이해하기 쉽게 써놨길래 퍼왔습니다..)

테이블스페이스는 데이터베이스의 물리적 스키마(테이블,인덱스)를 생성하기 위한 공간입니다. 
테이블스페이스가 생성되기 위해서는 당연히 데이터베이스가 정의되어야 하고요...
이러한 테이블스페이스가 필요로 하는 물리적 디스크 공간이 데이터파일입니다.
테이블스페이스와 데이터파일의 관계는 당연히 1:N 의 관계이고요...
당연히 테이블스페이스가 처음 생성이 될때는 데이터파일이 지정되어야 합니다.
오라클 데이터베이스같은 경우에는, 오라클 데몬 (DBWR인가...)이 다음의 프로세스를 거쳐 테이블스페이스를 생성합니다.

 1. 테이블스페이스 생성 구문 및 파라미터를 분석한다.

2. 데이터파일 경로가 파일 시스템상에 존재하는 올바른 경로인지 확인한다.

3. 데이터파일을 지정된 파일 시스템에 생성한다.

4. 파일시스템이 생성되면 테이블스페이스를 데이터 사전에 등록하고 생성한다.

테이블스페이스가 생성되면, 그 테이블스페이스를 사용할 유저를 생성합니다.
유저의 생성 구문은
create user "사용자명" identified by "암호"
default tablespace "테이블스페이스명"
temporary tablespace "임시테이블스페이스명";
입니다. 당연히 테이블스페이스가 지정이 되어 있어야 유저를 생성할 수 있습니다
(기본 테이블스페이스는 기본적으로 "시스템"테이블 스페이스입니다)

한가지 예를 들어 설명드리겠습니다.

예를 들어 "홍길동" 이 농사를 짓습니다.
농사를 지으려면 "땅"이 필요합니다.
"땅"을 구획을 지어 구별할 수 있는 이름으로 나누기 위해서는,
나라에서 지정하는 주소의 규칙을 따라서 "행정구역"으로 구분합니다.
"홍길동"이 농사를 짓기 위해 토지를 매입하려고 합니다.
나라에서는 "홍길동"이 사려는 땅이 누구의 소유인지 확인하고,
없으면 "번지"를 매겨 구획을 짓습니다.
그리고 "홍길동"은 해당 "번지" 에 대한 "등기부등본"을 받고 농사를 짓습니다.
그 다음부터는 "홍길동"은 마음대로 자신의 "농장"안에서
"콩"도 심고, "고추"도 심고, "참외"도 심습니다.
"농장"이 모자라게 되면, 추가로 "번지"를 매입하여 "농장"에 편입합니다. 
당연히 "등기부등본"에는 해당 "번지"가 "홍길동"의 "농장"임을 표시합니다.
 

"땅"은 데이터베이스,
"농장"은 테이블스페이스,
"행정구역"은 데이터파일이 들어갈 파일 시스템,
"번지"는 데이터파일,
"등기부등본"은 데이터사전,
"홍길동"은 유저,
"콩밭","고추밭","참외밭"은 테이블 개념으로 이해하시면 되겠습니다.
그럼 인덱스는요?
"콩밭"이나,"고추밭"이나,"참외밭"에서
"완두콩", "풋고추", "개구리참외"를 쉽게 찾기 위한 인식자입니다.
"고랑, 줄" 정도가 인덱스에 해당한다고 보면 되겠군요...
"완두콩은 첫번째 고랑부터 세번째 고랑까지 심었다" 면 말이죠...

----------------------------------------------------------------------------
테이블스페이스의 용량을 알아보는 쿼리문
SELECT
"Check Time"
,TS_INFO.tablespace_name
,TS_INFO."TOTAL SIZE(MB)"
,TS_INFO."USED(MB)"
,TS_INFO."AVAIL(MB)" "Tot_AVAIL(MB)"
,TO_CHAR((MAX(DFS.BYTES)/1024/1024),'999,990.999') "Act_AVAIL(MB)"  -- max Extent size on The tablespace
,TS_INFO."USED %"
,TS_INFO."FREE %"
,TS_INFO."STATUS"
FROM (
SELECT
SYSDATE "Check Time"
,tablespace_name
,sum(total_size)/1024 "TOTAL SIZE(MB)"
,TO_CHAR(round((sum(used)/1024),4),'999,990.999') "USED(MB)"
,TO_CHAR((sum(total_size)/1024)-(round((sum(used)/1024),4)),'999,990.999') "AVAIL(MB)"
,TO_CHAR(round((sum(used)/sum(total_size)),4)*100,'990.99') "USED %"
,TO_CHAR(round(1-(sum(used)/sum(total_size)),4)*100,'909.99') "FREE %"
,CASE WHEN  (round(1-(sum(used)/sum(total_size)),4)*100) <= '10' THEN ' Alert        ☜'
      WHEN  (round(1-(sum(used)/sum(total_size)),4)*100) <= '15' THEN ' Warning   ☜'
      WHEN  (round(1-(sum(used)/sum(total_size)),4)*100) <= '30' THEN ' Normal     △'
      ELSE ' Good        ◎' END "STATUS"
FROM (
SELECT
                  b.tablespace_name , -- tablespace Name
                  b.bytes / 1024 total_size, -- 총 Bytes
                  ((b.bytes - sum(nvl(a.bytes,0)))) / 1024 used, -- 사용한 용량
                  (sum(nvl(a.bytes,0))) / 1024 free_size -- 남은 용량
                  FROM DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
and
b.tablespace_name in (select tablespace_name from dba_tablespaces)
                  GROUP BY b.tablespace_name, b.file_name, b.bytes

)
GROUP BY tablespace_name
) TS_INFO,
DBA_FREE_SPACE DFS

WHERE TS_INFO.TABLESPACE_NAME = DFS.TABLESPACE_NAME
GROUP BY TS_INFO.tablespace_name,"TOTAL SIZE(MB)","USED(MB)","AVAIL(MB)","USED %","FREE %","STATUS","Check Time"
ORDER BY "FREE %"; 

 
<데이타 파일별 용량 확인 쿼리> 

SELECT            SYSDATE "Check Time",
                  b.file_name "FILE_NAME", -- DataFile Name
                  b.tablespace_name "TABLESPACE_NAME", -- tablespace Name
                  TO_CHAR((b.bytes / 1024),'999,990,999') "TOTAL SIZE(KB)", -- 총 Bytes
                  TO_CHAR((((b.bytes - sum(nvl(a.bytes,0)))) / 1024),'999,990,999') "USED(KB)", -- 사용한 용량
                  TO_CHAR(((sum(nvl(a.bytes,0))) / 1024),'999,990,999') "FREE SIZE(KB)", -- 남은 용량
                  TRUNC(((sum(nvl(a.bytes,0)) / (b.bytes)) * 100),2) "FREE %" -- 남은 %
                  FROM DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
-- and b.tablespace_name = UPPER('&TS_name') -- 테이블 스페이스별로 보고싶을때 주석지우고 사용
                  GROUP BY b.tablespace_name, b.file_name, b.bytes
ORDER BY b.tablespace_name;
-----------------------------------------------------------------------
1. 해당 데이터파일의 크기를 재조정
ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\KIRIO1\A1_CLON\A1.DBF'
RESIZE 1100M;


2. 해당 테이블 스페이스에 새로운 데이터파일 추가
ALTER TABLESPACE DATA ADD DATAFILE 'd:\oracle\oradata\kirio1\data01.dbf'
SIZE 100M;


3. 해당 데이터파일에 AUTOEXTEND ON 설정
ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\KIRIO1\A1_CLON\A1.DBF'
AUTOEXTEND ON;

'컴퓨터 > DB' 카테고리의 다른 글

오라클 오류메시지  (0) 2009.01.15
데이터베이스 스키마  (0) 2009.01.15
오라클 초보자를 위한 팁  (0) 2009.01.15
오라클 힌트  (0) 2009.01.14
오라클에서 not exists, not in, minus의 성능차이  (0) 2009.01.13
      
Posted by k_ben