Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Whoot

Delet em uma tabela com FK

Recommended Posts

O problemas é que não conheço o relacionamento, que dizer, tem varias tabelas mas não sei como achar qual esta sendo a da chave estrangeira....como posso descobrir isso? e se possivel como posso deletar um registro sem q de erro dizendo q tem uma chave estrangeira?Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ex: Nome do Banco de dados: PROJETOnome da TAbela que conheço, a aqual querdo apagar o resitroou saber os relacionamnetos:tabela: Usuarios

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja com alguém do seu trabalho, qual é a tabela principal, no caso, deve ser a que tem o maior número de campos. Ou se não, querendo excluir a tabela, dê um drop table, se ela não excluir, veja qual é a chave primária e3 vá assim por diamte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

...tem varias tabelas mas não sei como achar qual esta sendo a da chave estrangeira....como posso descobrir isso?

Dá uma olhada na tabela USER_CONSTRAINTS. É ela que guarda esse tipo de informação.Para ver as FK faça o seguinte:
SELECT   TABLE_NAME AS TABELA,   CONSTRAINT_NAME AS NOME,   CONSTRAINT_TYPE AS TIPOFROM USER_CONSTRAINTSWHERE CONSTRAINT_TYPE = 'R';
As constraints são exibidas da seguinte forma:
P = Primary KeyR = Foreign KeyC = CheckU = Unique
Dê um "DESC USER_CONSTRAINTS" para ver outras informações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz,

 

Dê um SELECT nessa view, DBA_CONS_COLUMNS, ela tem informações sobre QUAL coluna foi feita uma constraint, e fazendo um JOIN com a DBA_CONSTRAINTS, você terá qual o tipo de constraints ela é.

 

Exemplo:

 

SQL > SELECT a.constraint_name, a.constraint_type, a.table_name, a.status, b.column_name

2 FROM dba_constraints a, dba_cons_columns b

3 WHERE a.constraint_name=b.constraint_name and a.owner=b.owner;

 

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera,

 

Tinha esse mesmo problema e resolvi fazer um script...

 

Ai vai:

 

 

--

-- ACHANDO O NOME EXATO DA TABELA QUE EXISTE A LIGACAO DAS TABELAS

--

 

set serveroutput on

DECLARE

var_r_constraint_name VARCHAR2(40);

var_tabela VARCHAR2(60);

var_constraint_name VARCHAR2(40);

var_nomeDaColuna VARCHAR2(60);

var_nomeDaColuna2 VARCHAR2(60);

var_exception number;

BEGIN

--

-- NOME DA CONSTRAINT

--

var_constraint_name := 'SYS_C00132827';

 

var_tabela := null;

var_exception := 1;

FOR nomeContraint IN (select * from user_constraints

where constraint_name = var_constraint_name and

r_constraint_name is not null) LOOP

 

SELECT table_name, r_constraint_name INTO var_tabela, var_r_constraint_name

FROM user_constraints

where constraint_name = nomeContraint.r_constraint_name;

 

SELECT column_name into var_nomeDaColuna

FROM user_Cons_Columns

where constraint_name = nomeContraint.constraint_name;

 

SELECT column_name into var_nomeDaColuna2

FROM user_Cons_Columns

where constraint_name = nomeContraint.r_constraint_name;

 

Dbms_Output.Put_Line('-------------------------------------------');

Dbms_Output.Put_Line('-- As tabelas se ligam da seguinte forma --');

Dbms_Output.Put_Line('-------------------------------------------');

Dbms_Output.Put_Line('--');

Dbms_Output.Put_Line(rPad(nomeContraint.table_name,30,' ')||rPad(' ('||var_nomeDaColuna||')',40,' '));

Dbms_Output.Put_Line(rPad(var_tabela,30,' ')||rPad(' ('||var_nomeDaColuna2||')',40,' '));

Dbms_Output.Put_Line('--');

Dbms_Output.Put_Line('-------------------------------------------');

Dbms_Output.Put_Line('A chave estrangeira(FK) de '||nomeContraint.table_name||' e '||var_constraint_name);

Dbms_Output.Put_Line('-------------------------------------------');

Dbms_Output.Put_Line('A chave primaria(PK) da tabela '||var_tabela||' e '||nomeContraint.r_constraint_name);

Dbms_Output.Put_Line('-------------------------------------------');

var_exception := 0;

END LOOP;

 

begin

SELECT table_name into var_tabela

FROM user_constraints

where constraint_name = var_constraint_name;

exception when no_data_found then

var_tabela := null;

end;

 

IF (var_tabela is not null and var_exception = 1) THEN

Dbms_Output.Put_Line('-------------------------------------------');

Dbms_Output.Put_Line('-- A CONSTRAINT '||var_constraint_name||' e chave primaria da tabela '||var_tabela);

Dbms_Output.Put_Line('-------------------------------------------');

elsif (var_tabela is null and var_exception = 1) then

Dbms_Output.Put_Line('-------------------------------------------');

Dbms_Output.Put_Line('-- Não existe ligação no banco para a CONSTRAINT: '||var_constraint_name);

Dbms_Output.Put_Line('-- Tente novamente com outra constraint !');

Dbms_Output.Put_Line('-------------------------------------------');

END IF;

END;

/

 

 

OBS: nao esquecam de colocar o nome da constraint na variavel

 

var_constraint_name

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno,

 

Cara, legal seu script. Tu pode criar um tópico no SUB-FÓRUM de SCRIPTS.

 

Deste modo, várias pessoas poderão ter acesso ao seu script. Coloque seus créditos.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.