최상의 답변
집 주소가 거주지를 고유하게 식별하는 것처럼 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.