CREATE OR REPLACE PROCEDURE truncate_table (tbl_adinin_birazi IN VARCHAR2)
IS
v_dyntask VARCHAR2 (200);
trunc_tbl_adi VARCHAR2 (30 BYTE);
BEGIN
FOR trunc_tbl_adi IN
(SELECT table_name
FROM all_tables
WHERE owner ='HR' AND table_name LIKE '%' ||tbl_adinin_birazi|| '%')
LOOP
-- yukarida tablo adininin bir kismini like ifadesine sokarak arama yapiyoruz
-- bunun bu sekilde kullanilmasinin amaci gecici(temp) tablalara TMP_ile basalayabilir.
-- yada musteri ile ilgili tablolar MUS_ ile baslabilir.
-- bu örnekler arttiralibilir.
v_dyntask := 'truncate table ' || trunc_tbl_adi.table_name;
-- execute immediate ile çalistirlacak olan katar belirlendi.
EXECUTE IMMEDIATE v_dyntask;
-- commit leyerek tabloyu kaydediyoruz.
COMMIT;
-- burada döngü içerisine sokmamizdaki amaç birden fazla tablo olabilir
-- truncate ediledecek olan toplarin hepsinini bu isleme tabi olmasi için döngü içerisinde yapiyoruz.
END LOOP;
END truncate_table;
bu procedureyi kullanamak için aşağıdaki script işimizi görecektir.
DECLARE
tbl_adinin_birazi VARCHAR2 (30 BYTE) := 'ALI';
BEGIN
truncate_table (tbl_adinin_birazi);
END;
aman dikkat truncate table tehlikeli bir işlemdir. Yanliş ellere geçmesin :))
ayrıca yukaridaki kodda sadece truncate işlemi yapılmaz ayrıca drop işlemi de yapabilirsiniz. Drop yapmak için aşağıdaki değişikliği yapmanız yeterli oalcaktir.
v_dyntask := 'DROP table ' || trunc_tbl_adi.table_name;
No comments:
Post a Comment