IT

'소프트웨어/Oracle'에 해당되는 글 32건

  1. 2013.08.27 OVER()함수
  2. 2013.08.07 일련번호 채번
  3. 2013.08.05 Toad 단축키
  4. 2013.07.15 Number타입 컬럼의 자바 클래스의 필드 타입
  5. 2013.07.15 오라클 힌트

OVER()함수

2013. 8. 27. 18:28 : 소프트웨어/Oracle

COUNT(*) OVER() : 전체행 카운트

COUNT(*) OVER()(PARTITION BY 컬럼) : 그룹단위로 나누어 카운트

 

MAX(*) OVER() : 전체행 중에 최고값

MAX(*) OVER()(PARTITION BY 컬럼) : 그룹내 최고값

 

MIN(*) OVER() : 전체행 중에 최소값

MIN(*) OVER()(PARTITION BY 컬럼) : 그룹내 최소값

 

SUM(*) OVER() : 전체행 합

SUM(*) OVER()(PARTITION BY 컬럼) : 그룹내 합

 

AVG(*) OVER() : 전체행 평균

AVG(*) OVER()(PARTITION BY 컬럼) : 그룹내 평균

 

STDDEV(*) OVER() : 전체행 표준편차

STDDEV(*) OVER()(PARTITION BY 컬럼) : 그룹내 표준편차

 

RATIO_TO_REPORT(*) OVER() : 전체행 값/SUM(전체행값) 퍼센테이지로 나타낼경우 100곱하면 됩니다.

RATIO_TO_REPORT(*) OVER()(PARTITION BY 컬럼) : 현재행 값/ SUM(그룹행값) 퍼센테이지로 나타낼경우 100곱하면 됩니다.

Posted by sinpk

    1) 일련번호 채번
        * sequence : 가장 효율적이고 정확한 방법
        * max()+1 : 현업에서 여전히 많이 사용되는 방법, 데이터 중복 가능성을 염두에 두고 개발을 해야 하며

                         Sequence보다 성능상 비효율

 

        * 문제가 되는 일련번호 채번 방식
        SQL> SELECT LPAD( DECODE(MAX(EMPLOYEE_ID),'','0000001',(MAX(EMPLOYEE_ID)+1)), 7, 0)

                 FROM EMPLOYEES;
        ----------------------------------------------------------------------------------
        | Id  | Operation                  | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
        ----------------------------------------------------------------------------------
        |   0 | SELECT STATEMENT |                          |      1 |       3 |        1   (0)| 00:00:01 |
        |   1 |  SORT AGGREGATE   |                          |      1 |       3 |                 |             |
        |   2 |   INDEX FULL SCAN   | EMP_EMP_ID_PK |   107 |    321 |        1   (0)| 00:00:01 |
        ----------------------------------------------------------------------------------
        * index fast full scan을 사용해 효율적인 듯 하지만 심각한 문제 있음
        * index fast full scan은 index의 leaf node전체를 muiti block I/O 를 통해 읽게 됨
        * 그결과 모든 Index Entry를 읽게 됨
        * 일련번호 1개를 채번하기 위해서 지나친 비효율성임
        * 현업에서 접수 일련번호 채번은 동시 다방적으로 발생하는일이 다반사
        * row가 늘어갈수록 성능저하가 되는건 당연함 

 

    2) sequence 생성 예제
        CREATE SEQUENCE JUPSU_SEQ START WITH 1 INCREMENT BY 2 MAXVALUE 100000000 NOCYCLE CACHE 20;
            - JUPSU_SEQ : 시퀀스명
            - START WITH : 시작번호
            - INCREMENT BY : 증가되는 단위, 양/음수 가능
            - MAXVALUE : 시퀀스의 최대값
            - NOCYCLE : 최대값 도달시 에러발생후 중지하는 옵션. 디폴트암
            - CYCLE : 최대값 도달시 MINVALUE(1)부더 다시 시작
            - CACHE : 미리 메모리상(SGA)에 20개의 일련번호를 생성해두는 옵션.

                            일련번호가 동시에 많이 필요한 경우 유용한 옵션. 디폴트 20
     
        SQL> SELECT JUPSU_SEQ.NEXTVAL FROM DUAL; //호출할 때마다 증가된 값 리턴
        SQL> SELECT JUPSU_SEQ.CURRVAL FROM DUAL; //호출할 때마다 현재 값 리턴
        SQL> SELECT TO_CHAR(JUPSU_SEQ.NEXTVAL,'fm0000000000') FROM DUAL; //문자형 일련번호 생성

 

        * 시퀀스는 대부분 INSERT절에 사용됨 
        * 시퀀스는 거의 자원을 소모하지 않음 강추함

 


Posted by sinpk

F1

Toad 도움말 파일의 SQL Editor 부분이 표시됩니다.

F2

전체 화면 Editor Editor/Results 패널 표시 장치 사이를 전환합니다.

F2

전체 화면 그리드를 전환합니다.

F3

다음으로 일치하는 것을 찾습니다.

F3

이전에 일치하는 것을 찾습니다.

F4

팝업 창의 테이블프로시저함수또는 패키지를 설명합니다.

F5

스크립트로 실행합니다.

F6

커서를 Editor Results 패널 사이로 전환합니다.

F7

모든 텍스트를 지웁니다.

F8

이전 SQL 문을 재호출합니다(SQL Statement Recall 창을 불러옵니다).

F9

실행문을 실행합니다.

F9

실행(구문 분석없이 실행문을 검사합니다.

F9

커서 위치에서 현재 실행문을 실행합니다.

F10

오른쪽 클릭 메뉴를 표시합니다.

F11

Script 같은  실행(=F5)

F12

편집기 내용을 지정된 외부 편집기로 전달합니다.

A

모든 텍스트를 선택합니다.

C

복사

D

프로시저 인수를 표시합니다.

E

현재 실행문에서 Explain Plan 실행합니다.

F

텍스트를 찾습니다(Find Text 창을 불러옵니다).

G

라인으로 이동합니다(Goto Line 창을 불러옵니다).

L

텍스트를 소문자로 변환합니다.

M

Make Code Statement

N

이름이 지정된 SQL 문을 재호출합니다(SQL Statement Recall 창을 불러옵니다).

O

텍스트 파일을 엽니다.

P

Strip Code Statement

R

검색  바꾸기(Find and Replace Text 창을 불러옵니다)

S

파일을 저장합니다.

S

파일을 다른 이름으로 저장합니다.

T

 드롭다운을 표시합니다.

U

텍스트를 대문자로 변환합니다.

V

붙여넣기

X

잘라내기

Z

마지막으로 취소한 작업을 재실행합니다.


이전 실행문을 표시합니다.


다음 실행문을 표시합니다( 사용한  사용)


이전 탭으로 이동


다음 탭으로 이동


이전 결과 패널 탭으로 이동


다음 결과 패널 탭으로 이동


데이터 그리드에서는  위의 레코드셋으로 이동하며결과 그리드에서는 커서가 위치한 행의  번째 열로 이동하고편집기에서는 텍스트의  번째 열과  번째 행으로 이동합니다.


데이터 그리드에서는 레코드셋의  끝으로 이동하며편집기에서는 텍스트의 마지막열과 마지막 행으로 이동합니다 단원의 "주의" 참조하십시오.


코드 완성 템플릿을 활성화합니다.


MDI Child 창의 콜렉션을 순환합니다.


커서 이치에서 현재 SQL 문을 실행합니다.

. (마침표)

테이블 이름을 자동으로 완성합니다


'소프트웨어 > Oracle' 카테고리의 다른 글

OVER()함수  (0) 2013.08.27
일련번호 채번  (0) 2013.08.07
Number타입 컬럼의 자바 클래스의 필드 타입  (0) 2013.07.15
오라클 힌트  (0) 2013.07.15
오라클 페이징 쿼리  (0) 2013.06.30
Posted by sinpk

long의 범위 -9,223,372,036,854,775,808 ~ 9 ,223,372,036,854,775,807 를 자리수로 체크해보면 19자리까지만 해당되지만, 자리수의 맥스값은 범위를 벗어나므로 컬럼이 Number(19)미만 일때는 Long 타입을 사용하고, 이상일때는 String 타입으로 처리한다.

 

int의 범위 -2,147,483,648 ~ 2,147,483,647 를 자리수로 체크하면 10자리이지만 자리 수의 맥스 값은 범위를 벗어나므로 Number(9)미만 일때는 Integer를 사용하고 9 이상일때는 Long을 사용한다.

 

'소프트웨어 > Oracle' 카테고리의 다른 글

일련번호 채번  (0) 2013.08.07
Toad 단축키  (0) 2013.08.05
오라클 힌트  (0) 2013.07.15
오라클 페이징 쿼리  (0) 2013.06.30
merge into 문법  (0) 2013.06.27
Posted by sinpk

 

오라클 힌트 사용예

--------------------------------------------------

select   /*+ index( idx_col_1 ) */

           name, age, hobby

from     member

--------------------------------------------------


*오라클 힌트 사용표

 

INDEX ACCESS OPERATION 관련 HINT
HINT 내용 사용법
INDEX  INDEX를 순차적으로 스캔 INDEX(TABLE명, INDEX명)
INDEX_DESC INDEX를 역순으로 스캔 INDEX_DESC(TABLE명, INDEX명)
INDEX_FFS INDEX FAST FULL SCAN INDEX_FFS(TABLE명, INDEX명)
PARALLEL_INDEX INDEX PARALLEL SCAN PARALLEL_INDEX(TABLE명,INDEX명)
NOPARALLEL_INDEX INDEX PARALLEL SCAN 제한 NOPARALLEL_INDEX(TABLE명,INDEX명)
AND_EQUALS INDEX MERGE 수행 AND_EQUALS(INDEX_NAME, INDEX_NAME)
FULL FULL SCAN FULL(TALBE명)
JOIN ACCESS OPERATION 관련 HINT
HINT 내용 사용법
USE_NL NESTED LOOP JOIN USE_NL(TABLE1, TABLE2)
USE_MERGE SORT MERGE JOIN USE_MERGE(TABBLE1, TABLE2)
USE_HASH HASH JOIN USE_HASH(TABLE1, TABLE2)
HASH_AJ HASH ANTIJOIN HASH_AJ(TABLE1, TABLE2)
HASH_SJ HASH SEMIJOIN HASH_SJ(TABLE1, TABLE2)
NL_AJ NESTED LOOP ANTI JOIN NL_AJ(TABLE1, TABLE2)
NL_SJ NESTED LOOP SEMIJOIN NL_SJ(TABLE1, TABLE2)
MERGE_AJ SORT MERGE ANTIJOIN MERGE_AJ(TABLE1, TABLE2)
MERGE_SJ SORT MERGE SEMIJOIN MERGE_SJ(TABLE1, TABLE2)
JOIN시 DRIVING 순서 결정 HINT
HINT 내용
ORDERED FROM 절의 앞에서부터 DRIVING
DRIVING 해당 테이블을 먼저 DRIVING- driving(table)
기타 힌트
HINT 내용
append insert 시 direct loading
parallel select, insert 시 여러 개의 프로세스로 수행- parallel(table, 개수)
cache 데이터를 메모리에 caching
nocache 데이터를 메모리에 caching하지 않음
push_subq subquery를 먼저 수행
rewrite query rewrite 수행
norewrite query rewrite 를  수행 못함
use_concat in절을 concatenation access operation으로 수행
use_expand in절을 concatenation access operation으로 수행 못하게 함
merge view merging 수행
no_merge view merging 수행 못하게 함

'소프트웨어 > Oracle' 카테고리의 다른 글

Toad 단축키  (0) 2013.08.05
Number타입 컬럼의 자바 클래스의 필드 타입  (0) 2013.07.15
오라클 페이징 쿼리  (0) 2013.06.30
merge into 문법  (0) 2013.06.27
엔티티 도메인 추가 & Subject Area 생성  (0) 2011.05.31
Posted by sinpk