Estou precisando de algumas dicas!
Estou realizando algumas atividades de carga legada em nosso banco e inicialmente estou desabilitando todas as restrições das tabelas no processo de limpeza, antes de uma carga.
Isto demora muito e na verdade não há a necessidade de fazer-lo para todas as tabelas do banco. Então resolvi me aventurar no plsql!
A ideia era realmente simples, fazer um cursor onde passo o nome da tabela como parametro. Dai faço um loop nesta lista e para cada item faço de novo a mesma chamda ao curso com o nome da tabela depedente (recursivamente). De repente surgiu este codigo:
declare
PROCEDURE list_dependences(
p_table_name IN user_constraints.table_name%TYPE)
IS
CURSOR id_fkeys (
c_table_name user_constraints.table_name%TYPE)
IS
SELECT table_name, constraint_name fkey, r_constraint_name pkey, status
FROM user_constraints
WHERE constraint_type='R'
AND r_constraint_name IN (
SELECT constraint_name
FROM user_constraints
WHERE table_name=c_table_name
AND constraint_type='P')
ORDER BY table_name, constraint_name;
-- record variables
rec_id_fkeys id_fkeys%ROWTYPE;
begin
OPEN id_fkeys(p_table_name);
DBMS_OUTPUT.put_line('LISTA DEPENDENCIAS:'||p_table_name);
LOOP -- process foreign keys
FETCH id_fkeys INTO rec_id_fkeys;
EXIT WHEN id_fkeys%NOTFOUND;
DBMS_OUTPUT.put_line(rec_id_fkeys.table_name || ' ' ||
' CONSTRAINT ' || rec_id_fkeys.fkey);
list_dependences(rec_id_fkeys.table_name);
END LOOP; -- process foreign keys
end;
begin
list_dependences('VINCULOS');
END;
Bom, acho que vocês pegaram a ideia!
Alguém pode me auxiliar neste problema?
Gilberto