Oracle에서 ROWID를 사용하는 이유


최상의 답변

집 주소가 거주지를 고유하게 식별하는 것처럼 Oracle ROWID 는 디스크에서 행이있는 위치를 고유하게 식별합니다. ROWID의 정보는 Oracle이 행, 디스크 번호, 실린더, 블록 및 블록으로의 오프셋을 찾는 데 필요한 모든 것을 제공합니다.

Rowid 값 몇 가지 중요한 용도가 있습니다.

  • 단일 행에 액세스하는 가장 빠른 방법입니다.
  • 테이블의 행이 저장되는 방식을 보여줄 수 있습니다.
  • 테이블의 행에 대한 고유 식별자입니다.

Rowid를 테이블의 기본 키로 사용해서는 안됩니다. 예를 들어, 가져 오기 및 내보내기 유틸리티를 사용하여 행을 삭제하고 다시 삽입하면 해당 rowid가 변경 될 수 있습니다. 행을 삭제하면 Oracle은 나중에 삽입 된 새 행에 해당 rowid를 재 할당 할 수 있습니다.

선택

에서 Rowid 유사 열을 사용할 수 있습니다. span> 및 Where 쿼리 절에서 이러한 의사 열 값은 실제로 데이터베이스에 저장되지 않습니다. Rowid 의사 열의 값을 삽입, 업데이트 또는 삭제할 수 없습니다.

Answer

ROWID는 행의 물리적 위치입니다. 기본 키가없는 테이블이 있다고 가정합니다. 따라서이 테이블은 중복 행을 가질 수 있습니다. 중복 된 행은 삭제하고 정확히 하나만 유지하는 방법은 무엇입니까?

오라클은 기본 키에 대한 일종의 대체물로 ROWID를 제공합니다. [(행의 모든 ​​열을 기준으로 그룹화하고 내부 쿼리의 각 그룹에서 MIN (ROWID)를 취하고, 각 그룹에 대해 외부 쿼리에서 그룹의 다른 행을 삭제)] .. <상관 유형의 중첩 쿼리를 작성할 수 있습니다. / p>

예 :

SQL> select * from employees;

SSN NAME

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

1 john

1 john

2 john

2 john

10 sam

11 beth

11 beth

12 beth

8 rows selected.

SQL> delete from employees where ROWID NOT IN (select min(ROWID) from employees

group by ssn,name);

2 rows deleted.

SQL> select * from employees;

SSN NAME

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

1 john

2 john

2 john

10 sam

11 beth

12 beth

6 rows selected.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다