Localizar FK's de uma determinada tabela no Banco?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
wbarrence
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 55
Registrado em: Qui, 06 Out 2011 10:30 am
Localização: SP
--
WABS

Olá pessoal,

Alguém poderia me responder como eu faço para localizar todas as FK's de uma determinada tabela no banco de dados? Como saída eu queria o nome da tabela e o nome da coluna que tem a FK.

Att,
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá wbarrence,

Use estas queries para obter as informações desejadas:

Selecionar tudo

--- Esta querie mostra todas as FKs de uma Tabela
SELECT TABLE_NAME,
       CONSTRAINT_NAME 
  FROM DBA_CONSTRAINTS 
 WHERE OWNER = '<NOME_DONO_TABELA_EM_MAIUSCULAS>' 
   AND TABLE_NAME = '<NOME_TABELA_EM_MAIUSCULAS>'
   AND CONSTRAINT_TYPE = 'R'
ORDER BY 1,2;

Selecionar tudo

--- Esta querie mostra todas as FKs de uma tabela e as colunas que compoe cada uma delas
--- Lembrando que uma FK pode ser composta por mais de uma coluna
SELECT CONSTRAINT_NAME,COLUMN_NAME,POSITION
  FROM DBA_CONS_COLUMNS
 WHERE CONSTRAINT_NAME IN
       (SELECT CONSTRAINT_NAME 
          FROM DBA_CONSTRAINTS 
        WHERE OWNER = '<NOME_DONO_TABELA_EM_MAIUSCULAS>' 
            AND TABLE_NAME = '<NOME_TABELA_EM_MAIUSCULAS>'
           AND CONSTRAINT_TYPE = 'R')
 ORDER BY 1,2;
Se por acaso você não tiver acesso às views DBA, você pode se conectar como o próprio usuário e executar as queries a seguir:

Selecionar tudo

--- Esta querie mostra todas as FKs de uma Tabela
SELECT TABLE_NAME,
       CONSTRAINT_NAME 
  FROM USER_CONSTRAINTS 
WHERE TABLE_NAME = '<NOME_TABELA_EM_MAIUSCULAS>'
   AND CONSTRAINT_TYPE = 'R'
ORDER BY 1,2;

Selecionar tudo

--- Esta querie mostra todas as FKs de uma tabela e as colunas que compoe cada uma delas
--- Lembrando que uma FK pode ser composta por mais de uma coluna
SELECT CONSTRAINT_NAME,COLUMN_NAME,POSITION
  FROM USER_CONS_COLUMNS
 WHERE CONSTRAINT_NAME IN
       (SELECT CONSTRAINT_NAME 
          FROM USER_CONSTRAINTS 
        WHERE TABLE_NAME = '<NOME_TABELA_EM_MAIUSCULAS>'
            AND CONSTRAINT_TYPE = 'R')
 ORDER BY 1,2;
Abraços,

Sergio Coutinho
Avatar do usuário
wbarrence
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 55
Registrado em: Qui, 06 Out 2011 10:30 am
Localização: SP
--
WABS

Olá Sergio,

Primeiramente eu quero agradecer a sua ajuda, saliento que você ajudou bastante aqui no trabalho.

Só fiquei com uma dúvida, o que significa o 'R' do CONSTRAINT_TYPE = 'R'? E quais o valores esse campo pode assumir?

Att,
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

Oi amigo.

"R" de "Referential", ou seja, é uma CONSTRAINT do tipo FK !

Para os valores, pelo o que sei pode receber valores abaixo:

C = Check
P = Primary Key
R = Foreign Key
U = Unique Key
O = READ ONLY em uma VIEW
V = Check em uma VIEW

Corrijam-me se estiver errado.

Abraços.
Avatar do usuário
wbarrence
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 55
Registrado em: Qui, 06 Out 2011 10:30 am
Localização: SP
--
WABS

Valeu Gustavo,

Muito obrigado pela informação.

Att,
dejambo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 68
Registrado em: Qua, 27 Jun 2012 8:58 am

Galera..retornando o assunto, existe alguma maneira de mostrar o nome da tabela e o campo do usuário que está sendo referenciado na fk?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

crishpg
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Sex, 12 Out 2012 11:26 am
Localização: Santa ROSA
Contato:
Cristiano Schmitt
Administrador de Banco de Dados e Tecnologia

Coluna CHILD_TABLE, mostra qual tabela pertence a FK

Selecionar tudo

SELECT
  UC.CONSTRAINT_NAME CONSTRAINT_NAME,
        UC.TABLE_NAME CHILD_TABLE,
        UCC.COLUMN_NAME CHILD_COLUMN,
        UCR.TABLE_NAME PARENT_TABLE,
        UCCR.COLUMN_NAME PARENT_COLUMN
FROM USER_CONSTRAINTS UC
INNER JOIN USER_CONSTRAINTS UCR
  ON UCR.CONSTRAINT_NAME = UC.R_CONSTRAINT_NAME
INNER JOIN USER_CONS_COLUMNS UCC
  ON UCC.CONSTRAINT_NAME = UC.CONSTRAINT_NAME
     AND UC.TABLE_NAME = UCC.TABLE_NAME
INNER JOIN USER_CONS_COLUMNS UCCR
  ON UCCR.CONSTRAINT_NAME = UCR.CONSTRAINT_NAME
     AND UCR.TABLE_NAME = UCCR.TABLE_NAME
     AND UCCR.POSITION = UCC.POSITION
WHERE UCR.TABLE_NAME IN ('EMPLOYEES') --COLOCAR A TABELA PARA SER ANALISADA
     AND UCR.CONSTRAINT_TYPE IN( 'P','U')
ORDER BY CHILD_TABLE, CONSTRAINT_NAME, CHILD_COLUMN
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes