Bagaimana saya bisa menjatuhkan semua tabel pengguna di oracle?
Saya punya masalah dengan kendala. Ketika saya menonaktifkan semua itu masih tidak mungkin.
Bagaimana saya bisa menjatuhkan semua tabel pengguna di oracle?
Saya punya masalah dengan kendala. Ketika saya menonaktifkan semua itu masih tidak mungkin.
Jawaban:
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;
/
Jika Anda hanya ingin cara yang sangat sederhana untuk melakukan ini .. Inilah skrip yang saya gunakan di masa lalu
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Ini akan mencetak serangkaian perintah drop untuk semua tabel dalam skema. Spool hasil dari query ini dan jalankan.
Sumber: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Demikian juga jika Anda ingin menghapus lebih dari tabel, Anda dapat mengedit berikut ini sesuai dengan kebutuhan Anda
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Jawaban lain yang berhasil bagi saya adalah (kredit untuk http://snipt.net/Fotinakis/drop-all-tables-and-constraints-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;
Perhatikan bahwa ini berfungsi segera setelah Anda menjalankannya. Ini TIDAK menghasilkan skrip yang perlu Anda rekatkan di suatu tempat (seperti jawaban lain di sini). Ini berjalan langsung pada DB.
'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'
. Ini perlu, jika nama tabel huruf kecil.
PURGE
di akhir DROP
pernyataan.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
Cara paling sederhana adalah dengan menjatuhkan pengguna yang memiliki objek dengan perintah kaskade.
DROP USER username CASCADE
USER
terpisah untuk a DATABASE
. DROP USER username CASCADE
bekerja untukku. Tetapi di MySQL yang harus saya lakukan adalah DROP DATABASE
dan membuat yang baru
Cara termudah adalah dengan menjatuhkan tablespace lalu membangun tablespace kembali. Tapi saya lebih suka tidak harus melakukan itu. Ini mirip dengan Henry kecuali saya hanya melakukan copy / paste pada resultset di gui saya.
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
adalah tabel sistem yang berisi semua tabel pengguna klausa SELECT akan menghasilkan pernyataan DROP untuk setiap tabel Anda dapat menjalankan skrip
Untuk menghapus semua objek di oracle:
1) Dinamis
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) Statis
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');
Ikuti langkah-langkah di bawah ini.
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;