Tüm kullanıcı tablolarını nasıl Oracle'a bırakabilirim?
Kısıtlamalarla ilgili sorunum var. Hepsini devre dışı bıraktığımda hala mümkün değil.
Tüm kullanıcı tablolarını nasıl Oracle'a bırakabilirim?
Kısıtlamalarla ilgili sorunum var. Hepsini devre dışı bıraktığımda hala mümkün değil.
Yanıtlar:
BEGIN
FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects
WHERE object_type IN
('TABLE',
'VIEW',
'MATERIALIZED VIEW',
'PACKAGE',
'PROCEDURE',
'FUNCTION',
'SEQUENCE',
'SYNONYM',
'PACKAGE BODY'
))
LOOP
BEGIN
IF cur_rec.object_type = 'TABLE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '" CASCADE CONSTRAINTS';
ELSE
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"';
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('FAILED: DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"'
);
END;
END LOOP;
FOR cur_rec IN (SELECT *
FROM all_synonyms
WHERE table_owner IN (SELECT USER FROM dual))
LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || cur_rec.synonym_name;
END;
END LOOP;
END;
/
Sadece bunu yapmak için gerçekten basit bir yol istiyorsanız .. Heres geçmişte kullandığım bir senaryo
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Bu, şemadaki tüm tablolar için bir dizi bırakma komutu yazdırır. Bu sorgunun sonucunu biriktirin ve çalıştırın.
Kaynak: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Aynı şekilde tablolardan daha fazlasını temizlemek istiyorsanız, aşağıdakileri ihtiyaçlarınıza göre düzenleyebilirsiniz
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Benim için işe yarayan bir başka cevap da ( http://snipt.net/Fotinakis/drop-all-tables-and-contraints-within-an-oracle-schema/ )
BEGIN
FOR c IN (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE ('DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS');
END LOOP;
FOR s IN (SELECT sequence_name FROM user_sequences) LOOP
EXECUTE IMMEDIATE ('DROP SEQUENCE ' || s.sequence_name);
END LOOP;
END;
Bunun, çalıştırıldıktan hemen sonra çalıştığını unutmayın . Bu mu DEĞİL Eğer (burada diğer cevaplar gibi) bir yere yapıştırmak için gereken bir komut dosyası üretir. Doğrudan DB üzerinde çalışır.
'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'
. Tablo adları küçük harfle yazılmışsa bu gereklidir.
PURGE
sonuna DROP
eklerdim.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
En basit yol, nesnelerin sahibi olan kullanıcıyı basamakla komutuyla bırakmaktır.
DROP USER username CASCADE
USER
, a'dan ayrıdır DATABASE
. DROP USER username CASCADE
benim için çalıştı. Ama DROP DATABASE
En kolay yol, tablo alanını bırakmak ve sonra tablo alanını yeniden oluşturmaktır. Ama bunu yapmak istemem. Bu benim GUI sonuç kümesinde bir kopyala / yapıştır yapmak dışında Henry's benzer.
SELECT
'DROP'
,object_type
,object_name
,CASE(object_type)
WHEN 'TABLE' THEN 'CASCADE CONSTRAINTS;'
ELSE ';'
END
FROM user_objects
WHERE
object_type IN ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION','SEQUENCE')
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;'
FROM user_tables;
user_tables
SELECT deyiminin, komut dosyasını çalıştırabileceğiniz her tablo için bir DROP deyimi oluşturacağı tüm tabloları içeren bir sistem tablosu
Oracle'daki tüm nesneleri kaldırmak için:
1) Dinamik
DECLARE
CURSOR IX IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE'
AND OWNER='SCHEMA_NAME';
CURSOR IY IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE
IN ('SEQUENCE',
'PROCEDURE',
'PACKAGE',
'FUNCTION',
'VIEW') AND OWNER='SCHEMA_NAME';
CURSOR IZ IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('TYPE') AND OWNER='SCHEMA_NAME';
BEGIN
FOR X IN IX LOOP
EXECUTE IMMEDIATE('DROP '||X.OBJECT_TYPE||' SCHEMA_NAME.'||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
END LOOP;
FOR Y IN IY LOOP
EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' SCHEMA_NAME.'||Y.OBJECT_NAME);
END LOOP;
FOR Z IN IZ LOOP
EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' SCHEMA_NAME.'||Z.OBJECT_NAME||' FORCE ');
END LOOP;
END;
/
2) Statik
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables
union ALL
select 'drop '||object_type||' '|| object_name || ';' from user_objects
where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION')
union ALL
SELECT 'drop '
||object_type
||' '
|| object_name
|| ' force;'
FROM user_objects
WHERE object_type IN ('TYPE');
Lütfen aşağıdaki adımları izleyin.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tb from user_tables)
loop
execute immediate i.tb;
end loop;
commit;
end;
purge RECYCLEBIN;