ROWNUM

 

 

 

WHERE절의 ROWNUM은 '<', '<=' 조건을 주로 사용하며, '=' 조건은 WHERE ROWNUM=1인 경우만 예외적으로 사용할 수 있습니다.

WHERE ROWNUM<10 : (O) 9행만 추출,

WHERE ROWNUM=1 : (O) 1행만 추출,

WHERE ROWNUM =2 : (X)no rows selected(공집합)

→주의! 에러 메시지 없이 한건도 추출되지 않음

 

*SQL 실행 순서를 참조하시면 이해에 도움이 될 것입니다.

ROWNUM은 SELECT 절에서 정해지는데, 먼저 실행되는 WHERE절에서 ROWNUM을 조건으로 사용할 수 없기 때문입니다.

예외적으로 첫번째 데이터는 데이터 존재 여부를 확인하기 위한 용도로 특별하게 사용할 수 있습니다.

즉, ROWNUM은 몇 건을 지정하는 목적이지 몇 번째 건을 지정하는 용도가 아닙니다.

 

 

 

'오라클 > Oracle,SQL' 카테고리의 다른 글

오라클공부 148. ROWNUM  (0) 2015.09.10
오라클공부 147. ROWNUM  (0) 2015.09.10
오라클공부 145. ROWNUM  (0) 2015.09.10
오라클공부 144. ROWNUM  (0) 2015.09.10
오라클공부 143. ROWID 데이터 타입  (0) 2015.09.10

ROWNUM

 

 

'오라클 > Oracle,SQL' 카테고리의 다른 글

오라클공부 147. ROWNUM  (0) 2015.09.10
오라클공부 146. ROWNUM  (0) 2015.09.10
오라클공부 144. ROWNUM  (0) 2015.09.10
오라클공부 143. ROWID 데이터 타입  (0) 2015.09.10
오라클공부 142. [참조] Pseudo-column  (0) 2015.09.09

ROWNUM

 

 

 

 

ROWID 데이터 타입

 

*사용 예

-학생 테이블에서 모든 ROWID와 학번을 출력하여라

 

 

 

[참조] Pseudo-column

 

*참조만 될 뿐 데이터베이스에 따로 저장되지 않음

 

*Oracle의 Pseudo-column은 테이블의 실제적인 컬럼은 아니므로 테이블의 describe을 통해서는 보이지 않지만 매우 유용하게 사용

-CURRVAL, NEXTVAL(sequence number generator)

-LEVEL(for hierarchical queries)

-ROWNUM(a row's relative number)

 

 

 

[참조] Oracle ROWID의 변화

 

*ROWID는 단지 Transaction의 길이 동안만 Consistence의 유지가 보장

-User 프로그램 내부에 하나 이상의 Transaction이 존재한다면, ROWID가 변화할 수도 있음

 

*Multi-user 환경에서 예상되는 문제점

-다른 user가 현재 특정 user가 사용하고 있는 ROWID를 invalidata하게 하는 UPDATE나 INSERT, DELETE 작업을 수행할 수도 있음

-INSERT나 length를 줄이는 UPDATE 작업 등에서 내부적으로 자동으로 ROWID를 변경할 수 있음

 

 

 

[참조] Oracle ROWID(1/2)

 

 

[참조] Oracle ROWID(2/2)

 
*Oracle 8에서 Object와 Partition의 개념이 도입되면서 Database의 Segment를 식별하기 위한 Data Object Number가 추가 -> A four-piece FORMAT
-지수가 64인 Encoding 형태로 사용
-18문자 넓이를 가짐
-OOOOOOFFFBBBBBBRRR
。OOOOOO : Database Segment를 식별하기 위한 Data Object Number(오브젝트번호)
。FFF : Tablespace에 상대적인 Datafile Number(데이터파일번호)
。BBBBBB : Row를 포함하는 Data Block Number(블록번호)
。RRR : Block에서의 Row의 Slot(로우스롯번호)
 
*Rule-based optimizer에서 ROWID를 이용하여 데이터를 엑세스하는 것이 가장 상위로 랭크된 엑세스 방법이며 가장 빠른 방법
 
*Pseudo-column임
-참조만 가능하며 데이타베이스에 값이 저장되지 않음

 

 

 

+ Recent posts