Làm thế nào tôi có thể thả tất cả các bảng người dùng trong orory?
Tôi có vấn đề với các ràng buộc. Khi tôi vô hiệu hóa tất cả thì vẫn không thể.
Làm thế nào tôi có thể thả tất cả các bảng người dùng trong orory?
Tôi có vấn đề với các ràng buộc. Khi tôi vô hiệu hóa tất cả thì vẫn không thể.
Câu trả lời:
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;
/
Nếu bạn chỉ muốn một cách thực sự đơn giản để làm điều này .. Đây là một kịch bản tôi đã sử dụng trong quá khứ
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Điều này sẽ in ra một loạt các lệnh thả cho tất cả các bảng trong lược đồ. Spool kết quả của truy vấn này và thực hiện nó.
Nguồn: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Tương tự như vậy nếu bạn muốn xóa nhiều hơn các bảng, bạn có thể chỉnh sửa các mục sau cho phù hợp với nhu cầu của mình
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Một câu trả lời khác phù hợp với tôi là (ghi có vào http://snipt.net/Fotinakis/drop-all-tables-and-constraint-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;
Lưu ý rằng điều này hoạt động ngay lập tức sau khi bạn chạy nó. Nó KHÔNG tạo ra một tập lệnh mà bạn cần dán ở đâu đó (như các câu trả lời khác ở đây). Nó chạy trực tiếp trên DB.
'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'
. Điều này là cần thiết, nếu tên bảng là chữ thường.
PURGE
vào cuối DROP
tuyên bố.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
Cách đơn giản nhất là thả người dùng sở hữu các đối tượng bằng lệnh ghép tầng.
DROP USER username CASCADE
USER
là riêng biệt với a DATABASE
. DROP USER username CASCADE
đã làm cho tôi. Nhưng trong MySQL, tất cả những gì tôi phải làm là DROP DATABASE
tạo ra một cái mới
Cách dễ nhất là bỏ không gian bảng sau đó xây dựng không gian bảng sao lưu. Nhưng tôi không muốn phải làm điều đó. Điều này tương tự với Henry ngoại trừ việc tôi chỉ sao chép / dán vào tập kết quả trong gui của mình.
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
là một bảng hệ thống chứa tất cả các bảng của người dùng, mệnh đề SELECT sẽ tạo ra một câu lệnh DROP cho mỗi bảng bạn có thể chạy tập lệnh
Để loại bỏ tất cả các đối tượng trong orory:
1) Năng động
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) Tĩnh
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');
Hãy làm theo các bước dưới đây.
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;