Rowid vs rownum

ROWID é o local físico 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 o ROWID como um tipo de substituto para a chave primária. Você pode escrever uma consulta aninhada que seja do tipo correlacionado [(agrupe todas as colunas da linha e use MIN (ROWID) em cada grupo da consulta interna, pois cada grupo exclui as outras linhas do grupo na consulta externa)].

por exemplo:

SQL> selecione * dos funcionários; NOME DO SSN---------- ---------- 1 joão 1 joão 2 joão 2 joão 10 sam 11 beth 11 beth 12 beth8 linhas selecionadas.SQL> excluir dos funcionários em que ROWID NÃO ESTÁ (selecione min (ROWID) dos funcionáriosagrupar por ssn, nome);2 linhas excluídas.SQL> selecione * dos funcionários; NOME DO SSN---------- ---------- 1 joão 2 joão 2 joão 10 sam 11 beth 12 beth6 linhas selecionadas.

As informações em um ROWID fornecem à Oracle tudo o que ele precisa para encontrar sua linha, o número do disco, o cilindro, o bloco e o deslocamento no bloco. Os valores 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 de uma tabela são armazenadas.

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 à Oracle tudo o que ele precisa para encontrar sua linha, o número do disco, o cilindro, o bloco e o deslocamento no bloco.

Os valores 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 de uma tabela são armazenadas.
  • Eles são identificadores exclusivos 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 Importar e Exportar, por exemplo, seu ID de linha poderá ser alterado. Se você excluir uma linha, o Oracle poderá reatribuir seu rowid para uma nova linha inserida posteriormente.

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