1. onResume()/onPause()
onPause() 함수는 Activity 위에 다른 Activity 가 올라오거나 하여 focus 를 잃었을 때 불린다.
onResume() 함수는 focus 를 다시 얻었을 때 불린다.
예를 들어 폰의 alarm 이 울리거나 전화가 오는 경우 onPause() 함수가 불린다.

2. onStart()/onStop()
onStop() 함수는 Activity 가 완전히 화면을 벗어날 때 불린다. 예를 들어 홈키를 눌러 홈화면으로 이동하거나 전화가 와서 화면을 완전히 덮는 경우 불린다.
onStart() 함수는 Activity 다시 화면이 다시 돌아 올 때 불린다.

3. 선택 방법
만약 자신의 Activity 위에 다른 Activity 가 올라왔는데 화면을 전부 채우지 않았을 때 작업을 계속 하고 싶다면 onStart()/onStop() 함수에 작업 시작/종료 를 구현하면 되겠고 Activity 가 focus 를 잃으면 무조건 작업을 종료해야 하는 경우 onResume()/onPause() 함수에 작업 시작/종료를 구현하면 되겠다.

'Android' 카테고리의 다른 글

[Android] DPI 구하기!  (0) 2012.07.19
[Android] 키보드 숨기기/보이기  (0) 2012.07.19
[Android]APIDemo 순서입니다.  (0) 2012.05.31
[Android]D-day 계산기 만들어보기.  (0) 2012.05.29
[Android]키보드 입력 종류  (0) 2012.05.29

이클립스 테마 설정 - 이클립스 컬러테마


다들 공감할 이클립스 하얀화면 !!!그 피로도란!!!ㅠ_ㅠ 그래서 찾아보니 이렇게 감사한 자료를!!! 복받으실거에요
출처는 http://plusblog.tistory.com/865#recentEntries 입니다!!

http://eclipsecolorthemes.org/  이곳에서 더많은 테마를 받아서 Import가능합니다.

(1) 이클립스를 실행합니다


이클립스 컬러 테마 설정





(2) 기본 화면은 이렇게 텍스트 에디터 부분이 흰색입니다. 이를 이클립스 컬러 테마를 이용해서 변경해보도록 하겠습니다.


이클립스 컬러 테마 설정




(3) [Help] - [Eclipse Marketplace] 를 선택합니다.


이클립스 컬러 테마 설정




(4) 잘은 모르겠지만 이클립스를 튜닝할 수 있는 이런저런 도구들이 있나 봅니다. 아래와 같은 화면이 뜨게 됩니다.


이클립스 컬러 테마 설정




(5) 검색창에 'Color' 라고 입력하시면 'Eclipse Color Theme' 이라는 항목이 나옵니다. 이클립스 컬러 테마를 변경 할 수 있게 해주는 항목입니다. 아래 쪽에 'Install' 을 클릭합니다.


이클립스 컬러 테마 설정




(6) 설치를 시작합니다.


이클립스 컬러 테마 설정





(7) 해외에서 받아오는지 아니면 저희 연구실 네트웍 상황이 메롱이라서 그런지는 모르겠지만 한참 걸려야 설치 파일을 다운 받습니다. '참을 인' 이 3개면 살인도 면한다니 기다려보시기 바람니다.


이클립스 컬러 테마 설정




(8) 다운로드 완료! [Next] 버튼을 눌러 설치를 진행합니다.


이클립스 컬러 테마 설정




(9) 라이센스 동의서입니다. 잘 읽어보면 '뼈와 살을 분리한다' 라는 항목이 있을 수도 있으니 꼼꼼히 읽어보시기 바랍니다.


이클립스 컬러 테마 설정




(10) 설치를 시작합니다. 이클립스 컬러 테마가 설치되고 있습니다.


이클립스 컬러 테마 설정



(11) 설치를 하다보면 중간에 보안 경고가 뜹니다. 쿨하게 'Ok'를 눌러줍니다.


이클립스 컬러 테마 설정




(12) 잠시후 설치가 완료되고 이클립스를 재시작 하겠다는 메시지가 뜹니다. 'Restart Now'를 클릭하여 이클립스를 재시작합니다.


이클립스 컬러 테마 설정




(13) 이클립스가 재실행 됩니다.


이클립스 컬러 테마 설정



(14) 재실행 됩니다..


이클립스 컬러 테마 설정




(15) 뭐야 이거 안 바뀌었잖아!! 이거 사기네...

라고 말하지 마세요.. 제대로 설치 완료 되었고, 아직 설정을 안해서 흰색 기본 배경이 보이는 것입니다.


이클립스 컬러 테마 설정




(16) [Window] - [Preferences] 를 선택합니다.


이클립스 컬러 테마 설정




(17) 이런 창이 뜹니다.


이클립스 컬러 테마 설정




(18) [General] - [Appearance] - [Color Theme] 을 선택해줍니다. 제대로 설치가 되었다면 원래 없던 이 녀석이 떠야합니다.


이클립스 컬러 테마 설정




(19) Theme 항목에서 아무거나 골라잡고 클릭을 하면 옆에 예제가 나옵니다. 문자열의 색, 예약어의 색, 변수명의 색 등등 여러분 마음에 드는 테마를 골라서 설정해 주면 됩니다.


이클립스 컬러 테마 설정




(20) 색상 적용을 위해서 몇몇 에디터화면은 닫힐 수도 있다는 경고입니다. 저장을 안한녀석이 있다면 저장을 해주세요.


이클립스 컬러 테마 설정




(21) 적용이 완료되었습니다.


이클립스 컬러 테마 설정




대한민국 개발자분들의 눈 건강을 위하여, 흰색 배경의 에디터를 어두운 계열로 바꾸어 코딩하시기 바랍니다. 하루이틀 개발하는 것도 아니고, 오랫동안 먹고 살아야 할 텐데 눈 건강이 나빠지면 안되겠지요 ^^

이클립스 컬러 테마 설정 방법이었습니다

 

'ETC' 카테고리의 다른 글

[Java] 문자열 관련 Tip!!  (0) 2012.08.30
이클립스 디버깅 Tip  (0) 2012.08.03
이클립스 폰트 설정.  (0) 2012.06.15
[이클립스] 이클립스 단축키 정리 추가본  (0) 2012.06.10
이클립스 화면& 폰트 변경  (0) 2012.05.30
이클립스 폰트 설정. ETC 2012. 6. 15. 14:35

눈아파서 변경하고싶지만 건들자니 큰 건이라 안합니다..;;;귀찮아서 다운받아서 하자니 너무 마음에

 

안드는 부분이 많아 임시방편으로 폰트나 몇가지 색을 변경합니다...ㅠㅠ 누가 완전 맘에드는 걸로

 

설정한 파일 없으신가요 ㅜㅜ

 

 

Java 파일 폰트및 태그 색상 변경하기
Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Java :  폰트
Window -> Preferences -> General -> Editors -> Text Editors : 라인선택 색상, 백그라운드 색상등..
Window -> Preferences -> Java -> Editor -> Syntax Coloring : 자바 문법 태그 색상


XML 파일 폰트및 색상 변경하기
Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Basic -> Text Fonts
Window -> Preferences -> XML -> XML Files -> Editor -> Syntax Coloring

 

블럭색상 변경하기

Preferences > General > Editors > Text Editors > Annotations

Occurrences Highlighted의 색을 변경하면 됨.



블럭배경색

Perference > General > Editors > Text Editors - Apperance color options:

Selection background color의 색을 변경하면 됨. 선택한 블록 색 변경

 

Perference > General > Editors > Text Editors - Apperance color options:

Selection foreground color의 색을 변경하면 됨. 선택한 블록 글씨색 변경

 

현재 커서 라인색

Perference > General > Editors > Text Editors - Apperance color options:

Current line highlight : 현재 라인의 색

◈ Java Editor 단축키
Ctrl + Shift + M : 특정 클래스 Import 시키기
Ctrl + Shift + O : 자동으로 Import 시키기

Ctrl + L : 특정 줄 번호로 가기
Ctrl + 마우스커서(혹은 F3) : 클래스나 메소드 혹은 멤버를 상세 검색
ALT + Left , ALT + Right : 이전, 이후 작업 화면
Ctrl + Shift + G : 특정 메소드나 필드를 Reference하고 있는 곳을 검색
Ctrl + , or : 다음 annotation(에러, 워닝, 북마크 가능)으로 점프
Ctrl + T : hierarchy 팝업 창 띄우기(인터페이스 구현 클래스간 이동 시 편리)
F4 : hierachy view 퍼스펙티브 생성
Ctrl + O : 메소드나 필드 이동하기
Ctrl + Shift + Down : 클래스 내에서 다음 멤버로 이동
F2 : 컴파일 에러의 빨간 줄에 커서를 가져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공
Ctrl + 0 : 클래스 구조를 트리로 보기
Ctrl + Shift + T : 클래스 찾기
Ctrl + Shift + Space : 메소드의 파라미터 목록 보기

(메소드의 괄호 안에 커서를 놓고 이 키를 누르면 파라미터 타입 힌트를 볼 수 있음)
Ctrl + Shift + T : 검색하기

Java Search (자바요소검색)   

- Search String : 검색할 자바요소 이름

- Search For : 입력한 요소의 종류(매소드,패키지,생성자 등) 

- Limit To : 탐색 결과 제약

- Scope : 탐색범위 제약

File  Search(단순 스트링검색)


Ctrl + K : 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다
Ctrl + Shift + K : 역으로 찾고자 하는 문자열을 찾아간다
Ctrl + J : Incremental find 이클립스 하단 상태 표시줄에 Incremental find 라고 표시되어 한 글자자씩 누를 때 마다 코드내의 일치하는 문자열로 이동, 다시 Ctrl + J 를 누르면 그 문자열과 일치 하는 부분을 위/아래 방향키로 탐색이 가능
Ctrl + PageUp , Ctrl + PageDown : Edit 창 좌우 이동 (Edit 창이 여러 개 띄워져 있을 경우 Edit 창간의 이동)

Ctrl + Shift + F : 코드 자동 정리
Ctrl + 1 : Quick Fix 에러가 발생했을 경우 Quick Fix를 통해 쉽게 해결이 가능함
Ctrl + Shift + / : 블록 주석(/* */)
Ctrl + Shift + \ : 블록 주석 제거
Ctrl + / : 여러 줄이 한꺼번에 주석 처리됨 (주석 해제하려면 반대로 하면 됨)
Alt + Up(Down) : 위(아래)줄과 바꾸기
Alt + Shift + UP : 커서를 기준으로 토큰단위 블럭지정
Alt + Shift + DOWN : 커서를 기준으로 토큰단위 블럭해제
Alt + Shift + 방향키 : 블록 선택하기
Alt + Shift + R : Refactoring (이름변경) - Refactoing 으로 전체 소스에서 이름변경에 의한 참조 정보를 변경해 준다
Alt + Shift + J : 자동으로 주석 달기 (메소드나 멤버변수에 포커스 두고 실행)
Alt + Shift + Z : Surround With 메뉴 (try / catch 문이나 for , do , while 등을 해당 블록에 감싸주는 메뉴가 나타남)
Ctrl + Space : 입력 보조장치(Content Assistance) 강제 호출 → 입력하는 도중엔 언제라도 강제 호출 가능함
Ctrl + D : 한 줄 삭제
Ctrl + W : 파일 닫기
Ctrl + I : 들여쓰기 자동 수정
Ctrl + Shift + X : 대문자로 변환
Ctrl + Shift + Y : 소문자로 변환
Ctrl + Shift + L : 모든 단축키의 내용을 표시
Ctrl + Shift + B : 현재 커서 라인에 Break point 설정

Ctrl + F6 : 창간 전환, UltraEdit 나 Editplus 의 Ctrl + Tab 과 같은 기능
Ctrl + Shift + F4 : 열린 파일 모두 닫기
Ctrl + M : 전체화면 토글
Ctrl + Alt + Up(Down) : 한 줄(블럭) 복사

템플릿 수정 → 환경설정/자바/편집기/템플릿

◈ Window 이동
F10 : 메뉴창을 활성화
Ctrl + F8 : 다음 Perspective로 이동
Ctrl + N : 새로운 파일 및 프로젝트 생성
Ctrl + Shift + Down : Java Editor에서 다음 member로 이동
Ctrl + F7 : 다음 View로 이동
Ctrl + Shift + F7 : 이전 View로 이동
Alt + ← : 이전 작업 화면
Alt + → : 다음 작업 화면
F12 : 컴파일 중 에러 등으로 포커스가 다른 곳으로 갔을 때 Editor 로 커서 이동
Ctrl + 1 : 컴파일 에러가 발생한 곳에서 Ctrl + 1을 누를 경우 컴파일 에러에 대한 해결책을 제시

◈ 디버깅 단축키
Ctrl + Shift + B : 현 커서의 위치에 브레이크 포인터 설정/해제
F11 : 디버깅 시작
F8 : 디버깅 계속
F6 : 한 줄씩 실행(Step Over)
F5 : 한 줄씩 실행하되 함수일 경우 그 함수 내부로 들어감(Step Into)
Ctrl + R : 현재 라인까지 실행(Run to Line)
Ctrl + F11 : 이전에 실행되었던 Run 파일 실행

◈ 메소드 쉽게 생성하기
Ctrl + Space 하면 템플릿 (환경설정/자바/편집기/템플릿 에서 편집 가능)
클래스의 멤버를 일단 먼저 생성한다
override 메소드를 구현하려면, 소스→메소드대체/구현 에서 해당 메소드를 체크한다
기타 클래스의 멤버가 클래스의 오브젝트라면, 소스→위임메소드 생성에서 메소드를 선택한다

◈ Organize import
자바파일을 여러 개 선택한 후 소스→가져오기 체계화 해주면 모두 적용됨

◈ 소스 코드 형식 및 공통 주석 설정
환경설정 → 자바 → 코드 스타일 → 코드 포맷터 → 가져오기 → 프로파일.xml
환경설정 → 자바 → 코드 스타일 → 코드 템플릿 → 가져오기 → 템플릿.xml
다수의 자바파일에 프로파일을 적용하려면 패키지 탐색기에서 패키지를 선택한 후 소스 → 형식화를 선택하면 됨

◈ 에디터 변환
에디터가 여러 파일을 열어서 작업 중 일 때 Ctrl + F6 키를 누르면 여러 파일명이 나오고 F6키를 계속 누르면 아래로 Ctrl + Shift + F6 키를 누르면 위로 커서가 움직임
Ctrl + F7 : 뷰간 전환
Ctrl + F8 : 퍼스펙티브간 전환
F12 : 에디터로 포커스 위치

'ETC' 카테고리의 다른 글

이클립스 테마 플러그인하는 방법!(컬러&폰트)  (0) 2012.06.15
이클립스 폰트 설정.  (0) 2012.06.15
이클립스 화면& 폰트 변경  (0) 2012.05.30
Eclipse 유용한 단축키  (0) 2012.05.23
배드 테스트 프로그램  (0) 2012.05.22

디자인 길이와 실행시 내용이 다를때 자동 조정


var
    i, ItemWidth: Integer;
begin
    ItemWidth := 0;
    // 최대 pixel수를 구한다
    for i := 0 to (Sender as ComboBox).Items.Count - 1 do
    if GetTextWidth((Sender as ComboBox).Items[i]) > ItemWidth then
    ItemWidth := GetTextWidth((Sender as ComboBox).Items[i]) + 8;

// ComboBox 의 Drop-Down list 의 width를 변경하는 것은 단지
// pixel를 파라미터로 하여 CB_SETDROPPEDWIDTH 메시지를
// ComboBox 보내면 된다
(Sender as ComboBox).Perform(CB_SETDROPPEDWIDTH, ItemWidth, 0);


end;

< 델파이 단축키 모음 >

[찾기]

Ctrl + F Find

Ctrl + R Find and Replace

F3 Search Again


[화면이동]

F11 View Object Inspector

F12 Toggle Form/Unit

Alt + 0 View Window List

Ctrl + F12 View Unit

Shift + F12 View Form

Ctrl + PgUp/PgDown CodeEditor에서 현재페이지의 첫줄(PgUp), 마지막줄(PgDown)로 이동


[컴파일/실행]

Ctrl + F9 Compile

F9 Run

F7 Trace Into

F8 Trace Over

F5 Set Breakpoint

Ctrl + F5 Add Watch

Ctrl + F7 Evaluate/Modify


[블록관련]

Ctrl + Shift + U Unindent

Ctrl + Shift + I Indent

Ctrl + O, C Column Block Mode (또는 Alt키를 누른상태에서 Mouse를 드래그 해
도 컬럼블럭 설정이 가능, Shift + Alt + Arrow Key 를 사용해도 컬럼블럭 설정)

Ctrl + O, K Line Block Mode


[키 매크로]

Ctrl + Shift + R Record

* 키매크로 작성순서 : -> <원하는키> ->

Ctrl + Shift + P Play


[Object Inpector]

Ctrl + Down Object Inpector 상단의 Object List ComboBox 열기
이 상태에서 Component Name을 키보드로 치면 Incremental Search 기
능Tab Property 와 Property Value 부분을 전환가능하며,
Property 쪽에 Cursor 가 위치한 상태에서 키보드를 치면
Incremental Search


[Code Insight]

Ctrl + Space Code Completion 기능

Ctrl + J Code Template 기능

Ctrl + Shift + Up/Down Object 의 Member function/procedure 의 선언부와 구현부를 이동

Ctrl + Shift + C Object 의 Member function/procedure 의 선언부와 구현부중
의 한가지를 코딩 한후 누르게 되면 나머지 선언부 또는 구현부를 완성시켜줌


[기타]
Alt + F10 현재 위치에서 Popup-Menu 띄우기

Ctrl + Enter Code Editor 에서 현재위치의 단어로 File Open을 시도(기본 확장자
는 .pas) 하고 현재 Path 에서 그 파일을 찾지 못하면 File Open Dialog를 띄움.

Alt + { or } Find Matching Brace( ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘, ‘]’ )

#2에디터에서 Ctrl + E 를 하면 increment Search 가 됩니다. Ctrl+E 를 눌루고 문자열을 입력해 보세요
Ctrl+L 을 해도 다시 찾기 또는 다시 바꾸기를 할수 있습니다.

Alt+F11 은 유닛을 Uses 할때 사용하면 됩니다.

Ctrl+K+W 를 하면 선택한 블럭을 저장할수 있습니다.
Ctrl+K+R 을 하면 캐럿위치에 파일을 읽어서 붙일수 있습니다.

Ctrl+Alt+B 를 하면 현재 프로젝트에 설정된 BreakPoint 를 편집할수 있구 그 라인으로 이동할수 있습니다.


다시찾기 단축키
ctrl+f로 찾은후, F3을 누르면 다시 찾기가 됩니다.

 

토큰으로 찾기 단축키
커서가 토큰에 위치시키고는 ctrl + alt + 화살표 위로 또는
아래로 하면 커서위치의 토큰과 가장 가까이에 있는 토큰을 찾아갑니다.

ctrl + 마우스 왼쪽 클릭 단축키
ctrl + 화살표 위메소드 선언부바로가기
메소드선언부에서 ctrl+shift+화살표아래

 

메소드 구현부바로가기

메소드구현부에서 ctrl+shift+화살표위

 

컬럼블럭 선택 해제
선택: shift + alt + 화살표키하시면 컬럼열을 복사하실 수 있습니다.
해제: 그냥 편집창에서 마우스를 클릭하시면 해제됩니다.
또는 Ctrl+O+K를 하시면 해제됩니다.(이건 많은 분들이 모르시고 있더군요)

컴포넌트 이름은 알고 어떤 팔레트에 있는지 모를때
Alt + V + C를 하시고 컴포넌트 이름을 입력하셔서 찾으시면 됩니다.

델파이환경에서 unit을 제거했는데 dcu를 찾지 못할때..
델파이는 보통 컴파일시 변경된 파일만 체크하기 때문에 이런 문제가 나타날 수 있습니다.
그때는 Alt + P + B를 하시면 모두 빌드해서 에러를 잡으세요.

Project Group에서 여러 프로젝트를 한번에 빌드하기.
하나하나씩 컴파일 하지 마시고, Alt + P + E를 하시면 프로젝트 그룹내의 모든 프로젝트를 빌드하게 됩니다.

 


폼 디자이너
Ctrl + 방향키(←↑→↓) : 컴포넌트 위치 이동
Shift + Ctrl + 방향키(←↑→↓) : 컴포넌트 위치 이동(빠르게)
Shift + 방향키(←↑→↓) : 컴포넌트 크기 변경
선택 후 ESC : Parent컴포넌트로 이동

오브젝트 인스펙터
Ctrl + ↓ : 컴포넌트 선택기 팝업
(팝업 후 알파벳 문자 입력하여 해당 컴포넌트로 이동 가능)
Alt + ↓ : Property Combo 선택기 팝업
(팝업 후 알파벳 문자 입력하여 해당 컴포넌트로 이동 가능)
Ctrl + Enter : 열거형 Property값을 다음 값으로 변경
+선택 후, ←,→ : 하위 Property펼치기,접기
Ctrl + Tab : Properties,Events탭 전환
..선택 + Ctrl + Enter : Property Editor 열기
Tab : Property Name/Value토글

 

소스코드 에디터
Ctrl + Enter : 현재위치의 단어로 File Open 시도
현재 Path 에서 찾지 못하면 Dialog
Ctrl + S : 파일 저장
Ctrl + F4 : 파일 닫기
Ctrl + Shift + C : Method/Procedure/Property자동생성
Ctrl + Shift + ↑(↓) : 선언부,구현부 상호간 이동
Ctrl + Shift + R : 키 매크로 레코딩
Ctrl + Shift + P : 키 매크로 실행
Ctrl + ←,→ : 이전 단어, 다음 단어
Ctrl + Shift + ←,→ : 이전 단어, 다음 단어까지 블럭
Ctrl + Home : 소스코드 맨 앞으로 이동
Ctrl + End : 소스코드 맨 뒤로 이동
Shift + Home : 현재 라인 맨 앞까지 블럭
Shift + End : 현재 라인 맨 뒤까지 블럭
Ctrl + PageUp : 현재 화면의 맨 윗줄로 이동
Ctrl + PageDown : 현재 화면의 맨 아랫줄로 이동
Ctrl + Shift + I(U) : 현재 라인에 들여쓰기(내어쓰기)
Shift + Alt + 방향키(←↑→↓) : 블록 사각형 지정         -> Ctrl + Backspace : 해제
Ctrl + KL : 캐럿이 Line Home에 있을 때, Line 블럭
Ctrl + T : 현재 위치에서 마지막 단어까지 삭제
Ctrl + I : 블럭 지정된 문자를 공백으로 변환
Alt + {, } : '{'괄호 앞,뒤에서 사용. 짝 찾기.
Ctrl + N : 다음 Line 맨 앞으로 줄바꿈
Ctrl + M : 줄바꿈
Alt + BackSpace : 실행 취소
Ctrl + E : 한 글자 찾기
Ctrl + ↑(↓) : 캐럿 고정 스크롤
Ctrl + F : 찾기
Ctrl + R : 바꾸기

 

코드탐색기
F2 : 이름 변경하기(Uses제외)
DoubleClick : 소스코드 탐색기의 해당 코드로 이동
Ctrl + Shift + E : 탐색기<->에디터 창 이동

코드 인사이트(Code Insight)
Ctrl + Space : 코드완성 마법사
Ctrl + Shift : 메소드 파라미터 팁
Ctrl + J : 코드 템플릿 사용

 

기타 기능
Alt + F10 : 현재 위치에서 Popup-Menu 띄우기
F11 : View Object Inspector
F12 : Toggle Form/Unit
Alt + 0 : View Window List
Ctrl + F12 : View Unit
Shift + F12 : View Form 
 

1. App


1.1. Activity


1.1.1. Animation

- 화면전환을 애니메이션으로 처리한다.

Fade in/out

Zoom in/out

slide bottom to top

slide top to bottom

slide left / slide right

* android.app.Activity.overridePendingTransition

1.1.2. Custom Dialog

화면에 메시지를 보여준다. 확인/취소 등의 버튼은 없다.

1.1.3. Dialog

- 화면에 메시지를 보여준다. 확인/취소 등의 버튼은 없다.

- activity title 에 left icon을 추가할 수 있다.

* android.app.Activity.requestWindowFeature(Window.FEATURE_LEFT_ICON);

* getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_dialog_alert);

1.1.4. Forwarding

- activity stack에서 임의의 activity를 제거한다.

back button을 눌러도 제거된 activity는 나타나지 않고, 이전 activity가 나타난다.

다른 activity를 호출하고(startActivity), 제거하고자 하는 activity의 finish 메소드를 호출한다.

* startActivity / finish

1.1.5. HelloWorld

- 아주 기본적이고 전통적인 "안녕 세상아!"


1.1.6. PersistentState

- Activity의 onResume(), onPause() lifecycle 메소드에서 SharedPreferences에 설정값을 꺼내거나 보관한다.

* Activity.getPreferences(int mode)

* android.content.SharedPreferences

1.1.7. QuickContentsDemo

- 주소록의 연락처 데이타 목록을 보여준다.

* android.app.ListActivity

* android.widget.ResourceCursorAdapter

* android.content.ContentProvider

* android.content.ContentResolver

* android.app.Activity.getContentResolver()


1.1.8. Receive Result

- 다른 activity를 호출하고, 선택/결과값을 받는다.

- 결과값을 전달하는 activity에서는 setResult 메소드를 호출한 후 finish 처리를 한다.

* startActivityForResult

* onActivityResult(int requestCode, int resultCode, Intent data)

* setResult

* 참고

서로다른 앱간에 데이타를 주고받을 경우 startActivity 메소드를 사용할 수 있다.

이런 경우 startActivity 메소드를 호출하고 finish 메소드를 사용하여 해당 앱을 종료한다.

(단 AndroidManifast.xml 파일에 호출하는/호출당하는 url 을 명시해야 한다.)

호출을 당하는 앱에서는 onCreate 메소드에서 getIntent 메소드로 호출된 데이타를 얻을 수 있다.

결과값을 받을 때도 onCreate 메소드에서 getIntent 메소드로 결과 데이타를 얻을 수 있다.

앱에서 ISPMobile 과 같은 결제처리를 하는 경우 이와 같은 방식을 사용하고 있다.

아이폰/아이패드는 이와 비슷한 형태로 앱간에는 URL로만 호출할 수 있다.

(iOS에서는 Info.plist xml 파일에 해당 url 정보를 설정한다.)


1.1.9. Redirection

- SharedPreferences에 설정된 값에 따라 activity를 분기한다.

* SharedPreferences

* Intent

* startActivity / startActivityForResult


1.1.10. Reorder Activities

- activity history stack의 첫번째로 가져온다.

* Intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)

* Intent.FLAG_ACTIVITY_REORDER_TO_FRONT


1.1.11. Save & Restore State

- 입력값/상태값을 저장한다.

어떤 과정을 거쳐서 구현되는 것인지 잘 파악이 안된다.

* layout.xml의 android:freezesText="true"


1.1.12. SetWallpaper

- 메인 바탕화면의 이미지를 가져오기/변경하기

* android.view.WindowManager.getInstance(this)

1.1.13. Translucent

- 배경을 반투명 처리한다.

* activity에 style/theme를 사용하여 적용한다. (AndroidManifest.xml, styles.xml)

<style name="Theme.Translucent" parent="android:style/Theme.Translucent">

...

1.1.14. Translucent Blur

- 배경을 반투명/흐릿하게 처리한다.

* style/theme를 사용 및 window flag를 설정하여 적용한다.

Activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

1.1.15. Wallpaper

- 배경을 메인 바탕화면으로 적용한다.

* activity에 style/theme를 사용하여 적용한다. (AndroidManifest.xml, styles.xml)

<style name="Theme.Wallpaper" parent="android:style/Theme.Wallpaper">

...


1.2. Alarm

1.2.1. Alarm Controller

- 알람을 일시/주기적으로 발생시킨다. (short term)

BroadcastReceiver에서 알람 표출

* (android.app.AlarmManager)getSystemService(ALARM_SERVICE)

* android.app.PendingIntent.getBroadcast

* android.content.BroadcastReceiver interface

1.2.2. Alarm Service

- 알람을 일시/주기적으로 발생시킨다. (long term)

android.app.Service 에서 알람 표출

* (android.app.AlarmManager)getSystemService(ALARM_SERVICE)

* android.app.PendingIntent.getService

* android.app.Service interface


1.3. Dialog (AlertDialogSamples.java)

- OK/Cancel dialog with a message

- OK/Cancel dialog with a long message

- List dialog

- Progress dialog

- Single choice list

- Repeat alarm (multi choice list)

- Text Entry dialog

* android.app.Activity.showDialog(int id)

* android.app.AlertDialog.Builder

* android.app.Dialog

* android.app.ProgressDialog

* android.content.DialogInterface

 

1.4. Intents

- launch activity, service, broadcast

* android.content.Intent

 

1.5. Launcher Shortcuts

- home screen에 shortcut을 생성할 때, 특정 activity가 나오도록 shortcut을 만들 수 있다.

* Intent.ACTION_CREATE_SHORTCU


 

1.6. Menu

1.6.1. Inflate from XML

 

1.7. Notification

1.7.1. IncomingMessage

1.7.2. Notifying Service Controller

1.7.3. NotifyWithText

1.7.4. Status Bar

 

1.8. Preferences

1.8.1. Preferences from XML

1.8.2. Launching preferences

1.8.3. Preference dependencies

1.8.4. Default values

1.8.5. Preference from code

1.8.6. Advanced preferences


1.9. Search

1.9.1. Invoke Search

1.9.2. Query Search Results


1.10. Service

1.10.1. Foreground Service Controller

1.10.2. Local Service Binding

1.10.3. Local Service Controller

1.10.4. Remote Service Binding

1.10.5. Remote Service Controller

1.10.6. Service Start Arguments Controller


1.11. Text-To-Speech


1.12. Voice Recognition


2. Content

2.1. Assets

2.2. Resources

 

3. Graphics

3.1. AlphaBitmap

3.2. AnimateDrawables

3.3. Arcs

3.4. BitmapDecode

3.5. BitmapMesh

3.6. BitmapPixels

3.7. CameraPreview

3.8. Clipping

3.9. ColorFilters

3.10. ColorMatrix

3.11. Compass

3.12. CreateBitmap

3.13. Density

3.14. Drawable

3.15. FingerPaint

3.16. Layers

3.17. MeasureText

3.18. OpenGL ES

3.19. PathEffects

3.20. PathFillTypes

3.21. Patterns

3.22. Pictures

3.23. Points

3.24. PurgeableBitmap

3.25. Regions

3.26. RoundRects

3.27. ScaleToFit

3.28. SensorTest

3.29. SurfaceView Overlay

3.30. Sweep

3.31. Text Align

3.32. Touch Paint

3.33. Typefaces

3.34. UnicodeChart

3.35. Vertices

3.36. Xfermodes

 

4. Media

4.1. Media Player

4.2. VideoView

 

5. OS

5.1. Morse Code

5.2.Sensors

 

6. Text

6.1. Linkify

6.2. LogTextBox

6.3. Marquee

 

7. Views

7.1. Animation

7.2. Auto Complete

7.3. Buttons

7.4. Chronometer

7.5. Controls

7.6. Custom

7.7. Date Widgets

7.8. Expandable Lists

7.9. Focus

7.10. Gallery

7.11. Grid

7.12. ImageButton

7.13. ImageSwitcher

7.14. ImageView

7.15. Logout Animation

7.16. Layouts

7.17. Lists

7.18. Progress Bar

7.19. Radio Group

7.20. Rating Bar

7.21. ScrollBars

7.22. Seek Bar

7.23. Spinner

7.24. Tabs

7.25. TextSwitcher

7.26. Visibility

7.27. WebView

 

'Android' 카테고리의 다른 글

[Android] 키보드 숨기기/보이기  (0) 2012.07.19
[Android]안드로이드 라이프 사이클  (0) 2012.06.21
[Android]D-day 계산기 만들어보기.  (0) 2012.05.29
[Android]키보드 입력 종류  (0) 2012.05.29
[Android]형변환 종류  (0) 2012.05.29

일일이 하려면 ....@____________________@ ;;;

그래서 이런게 있더군요 ..

 

http://www.eclipsecolorthemes.org/ 

 

이곳에서 원하는 테마를 선택하셔서 EPF파일로 저장후 IMPORT하시면 됩니다.

 

자세한 내용이 필요하시면 http://neouser.tistory.com/270  포스팅이 잘되어있습니다.

 

만약 실패할경우 초기화 .......정말 찾다가 못찾았습니다.

 

이게 정상적인 방법인지는 모르겠지만. workspaese를 다시 설정해서 부팅하면 초기화면입니다.

 

그상태에서 .metadata폴더를 덮어 씌우고 기존 프로젝트를 Import 하시면 됩니다.

'ETC' 카테고리의 다른 글

이클립스 폰트 설정.  (0) 2012.06.15
[이클립스] 이클립스 단축키 정리 추가본  (0) 2012.06.10
Eclipse 유용한 단축키  (0) 2012.05.23
배드 테스트 프로그램  (0) 2012.05.22
컴퓨터 포멧후 드라이브 잡기 3DP  (0) 2012.05.22

출처 : 델마당 홍환민 님의 글!

 

저는 메신저를 만들어 볼떄 프로토콜을 만들면서 사용해 보았습니다. COPY DELETE보다 편한것같아서 참고하세요

 

문자열을 특정 구분자를 기준으로 나눠서 가져와야 할 일이 있을 겁니다.

예를 들어 "가을 운동회" 에서 저걸 가을, 운동회 라는 두개로 나눠서 가져오고 싶다고 합시다.

TStringList의 Delimiter와 DelimitedText 속성을 이용하는 방법도 있는데 구분자외에 특수문자인가

 

하는 것도 있어서 그 특수문자를 만나면 자동으로 짤려 버리는 문제가 있는 것으로 기억합니다.

ParsedList := TStringList.Create;
try
ExtractStrings([' '], [], PChar(FullStr), ParsedList);
finally
ParsedList.Free;
end;


위와 같이 TStringList를 하나 생성하셔서 ExtractStrings 함수에 넣어주면 원본 문자열

 

(위의 예에서는 FullStr) 을 주어진 구분자로 나누어서 ParsedList에 넣어줍니다.

ParsedList.Count, Strings[0]..[1].. 이런 속성을 이용해서 접근하시면 됩니다.

http://www.statwith.pe.kr/ORACLE/functions001.htm

[출처] Oracle 내부함수|작성자 서기

 

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('\0308') ) 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('abc\00e5\00f1\00f6') 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>

'Database' 카테고리의 다른 글

[Database]Ms SQL 명령어  (0) 2012.05.23
[Database]MySql 명령어 정리  (0) 2012.05.21