Por que usar ROWID no Oracle?


Melhor resposta

Assim como seu endereço residencial identifica exclusivamente onde você mora, um Oracle ROWID identifica exclusivamente onde uma linha reside no disco. As informações em um ROWID fornecem ao Oracle tudo o que ele precisa para encontrar sua linha, o número do disco, o cilindro, bloco e deslocamento no bloco.

Valores de Rowid têm vários usos importantes:

  • Eles são a maneira mais rápida de acessar uma única linha.
  • Eles podem mostrar como as linhas em uma tabela são armazenadas.
  • Eles são identificadores únicos para linhas em uma tabela.

Você não deve usar Rowid como a chave primária de uma tabela. Se você excluir e reinserir uma linha com os utilitários Import e Export, por exemplo, seu rowid pode mudar. Se você excluir uma linha, o Oracle pode reatribuir seu rowid a uma nova linha inserida posteriormente.

Embora você possa usar a pseudocoluna Rowid em Selecione e Onde cláusula de uma consulta, esses valores de pseudocoluna não são realmente armazenados no banco de dados. Você não pode inserir, atualizar ou excluir um valor da pseudocoluna Rowid.

Resposta

ROWID é a localização física de uma linha. Suponha que você tenha uma tabela sem chaves primárias. portanto, esta tabela pode ter linhas duplicadas. Como você excluiria linhas duplicadas, mas manteria exatamente uma desse tipo?

A Oracle fornece ROWID como uma espécie de substituto para a chave primária. Você pode escrever uma consulta aninhada que é do tipo correlacionado [(agrupar por todas as colunas na linha e tomar MIN (ROWID) em cada grupo na consulta interna, para cada grupo excluir as outras linhas no grupo na consulta externa)] ..

por exemplo:

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *