Estou procurando uma consulta que permita recuperar informações de chave estrangeira (cada linha: tabela e campo de referência, tabela e campo de referência) de um esquema inteiro.
Encontrei isso, mas não fornece todas as informações que preciso: https://stackoverflow.com/questions/4389228/sql-for-oracle-to-check-if-a-constraint-exists
Atualmente estou trabalhando nisso e pode acabar com uma solução nos próximos minutos/horas. Mas se alguém já tiver uma solução completa de trabalho, ficarei feliz em saber :)
Após alguma "engenharia reversa" nas consultas feitas pela ferramenta Navicat ao abrir a janela da tabela de design para uma tabela (consultas que recuperam informações sobre chaves estrangeiras aparecem na janela de histórico ), aqui está uma solução:
O SQL Developer vem com um relatório que faz exatamente isso.
Ele faz isso apenas para o esquema de login, mas é uma solução rápida fazer com que ele obtenha todos os FK no banco de dados - embora você possa omitir esquemas como 'APEX...' e 'SYS.'
Ele também omite coisas como tabelas na lixeira.
O relatório original está no painel Relatórios, nos relatórios do dicionário de dados.
Aqui está a consulta alterada para obter TODOS os FKs.
E aqui está o que esse relatório parece.
Um código um pouco complicado que também despeja comentários em cols (com base no código Frosty):
Para tornar a saída mais legível eu uso
break on TABLE_NAME;
emsqlplus
(veja minha pergunta https://stackoverflow.com/questions/14998296/print-only-first-unique-value-for-column-that-order-by-in-oracle-sqlplus / ).UPDATE Consulta mais simples que coleta lista de tabelas que possuem referência FK para determinada tabela (útil se você quiser limpar restrições após renomear tabelas):
Descobri que a maioria desses scripts tem problemas quando a restrição de chave estrangeira faz referência a uma tabela com mais de uma referência de coluna.
Aqui está o que eu uso: