czyszczenie wszystkich tabel

0

Witam,

Chciałem napisać procedurę czyszczącą wszystkie moje tabele. Zrobiłem to w pętli jednak, tabele są w różny sposób z sobą powiązane i otrzymuję wtedy błąd:
tabela ma unikatowe/główne klucze do których odwołują się obce klucze
Czy można jakoś wymusić żeby mimo to usunąć zawartość tabeli? Bo i tak wyczyszczę wszystkie.

0
SET FOREIGN_KEY_CHECKS = 0;
--czyszczenie tabel
SET FOREIGN_KEY_CHECKS = 1;
0

git, dzięki wielkie :-)

0

zapomniałem tylko dodać, że chcę to zrobić w oracle. Czy tam jest jakiś sposób?

Próbowałem wyłączyć więzy przy pomocy

for i in (select constraint_name, table_name from user_constraints where constraint_type ='R'
and status = 'ENABLED') LOOP
execute immediate 'alter table '||i.table_name||' disable constraint '||i.constraint_name||'';
end loop;

Ale sytuacja się powtarza.

0

Znalazłem rozwiązanie. Można usunąć tabele wywołując:
DROP table_name CASCADE CONSTRAINTS

0
djszaman napisał(a)

Znalazłem rozwiązanie. Można usunąć tabele wywołując:
DROP table_name CASCADE CONSTRAINTS

Z tym, że ta instrukcja dropuje tabele :) a ty je podobno chciałeś tylko wyczyścić.

0

Heh, faktycznie, pomyłka :-P

Ale dropowania też potrzebowałem :-P

Ostatecznie mam to tak:

for i in (select constraint_name, table_name from user_constraints where constraint_type ='R' and status = 'ENABLED') LOOP
  execute immediate 'alter table '||i.table_name||' disable constraint '||i.constraint_name||'';
end loop;
for c1 in (select table_name from user_tables) loop
  v_new_tab_name := '"' || C1.Table_Name|| '"' ;
  execute immediate (' truncate table '||v_new_tab_name) ;
end loop;

Dzięki za cierpliwość :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1