Do guia de conceito :
A principal desvantagem de um ROWID é que, embora seja normalmente estável, ele pode mudar em algumas circunstâncias:
- A tabela é reconstruída (
ALTER TABLE MOVE
...) - Exportar/Importar obviamente
- Tabela de partição com ativação de movimento de linha
Uma chave primária identifica uma linha logicamente , você sempre encontrará a linha correta, mesmo após um delete+insert. Um ROWID identifica a linha fisicamente e não é tão persistente quanto uma chave primária.
Você pode usar ROWID com segurança em uma única instrução SQL, pois o Oracle garantirá que o resultado seja coerente, por exemplo, para remover duplicatas em uma tabela. Para garantir a segurança, sugiro que você use apenas o ROWID entre declarações quando você tem um bloqueio na linha (SELECT ... FOR UPDATE).
Do ponto de vista do desempenho, o acesso à chave primária é um pouco mais caro, mas você normalmente notará isso apenas se fizer muitos acessos a uma única linha. No entanto, se o desempenho for crítico, você geralmente pode obter mais benefícios nesse caso usando o processamento de conjunto do que o processamento de linha única com rowid. Em particular, se houver muitas viagens de ida e volta entre o banco de dados e o aplicativo, o custo do acesso à linha provavelmente será insignificante comparado ao custo das viagens de ida e volta.