모든 사용자 테이블을 떨어 뜨리는 방법?
-
18-09-2019 - |
문제
Oracle의 모든 사용자 테이블을 어떻게 드롭 할 수 있습니까?
제약 조건에 문제가 있습니다. 내가 모든 것을 비활성화 할 때는 여전히 불가능합니다.
해결책
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;
END;
/
다른 팁
이 작업을 수행하는 정말 간단한 방법을 원한다면 제가 과거에 사용했던 대본이 있습니다.
select 'drop table '||table_name||' cascade constraints;' from user_tables;
이렇게하면 스키마의 모든 테이블에 대한 일련의 드롭 명령이 인쇄됩니다. 이 쿼리의 결과를 스풀하고 실행하십시오.
원천: https://forums.oracle.com/forums/thread.jspa?threadid=614090
마찬가지로 테이블보다 더 많은 것을 지우려면 필요에 맞게 다음을 편집 할 수 있습니다.
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
나를 위해 일한 또 다른 대답은 (신용 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;
이것이 작동합니다 즉시 당신이 그것을 실행 한 후. 그렇습니다 아니다 어딘가에 붙여 넣어야하는 스크립트를 생성합니다 (여기 다른 답변과 마찬가지로). DB에서 직접 실행됩니다.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
가장 간단한 방법은 캐스케이드 명령으로 객체를 소유 한 사용자를 떨어 뜨리는 것입니다.
DROP USER username CASCADE
가장 쉬운 방법은 테이블 스페이스를 떨어 뜨린 다음 테이블 스페이스를 백업하는 것입니다. 그러나 나는 그렇게 할 필요가 없다. 이것은 GUI의 결과 세트에서 복사/붙여 넣기를하는 것을 제외하고는 Henry와 유사합니다.
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 CLAUSE는 스크립트를 실행할 수있는 모든 테이블에 대해 드롭 문을 생성합니다.
Oracle의 모든 개체를 제거하려면 :
1) 동적
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||' '||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
END LOOP;
FOR Y IN IY LOOP
EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' '||Y.OBJECT_NAME);
END LOOP;
FOR Z IN IZ LOOP
EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' '||Z.OBJECT_NAME||' FORCE ');
END LOOP;
END;
/
2) 정적
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');