내 오라클 스콧 스키마가 같은 테이블 목록을 포함Oracle의 스키마에서 테이블 목록을 삭제하는 방법은 무엇입니까?
'prefix_A'
'prefix_B'
'prefix_C'
'A'
'B'
'C'
지금 내가 같은 테이블 접두사 '접두어 _'를 포함하는 테이블의 목록을 드롭 할, 그러나 다른 테이블의 A, B는 C가 동일하게 유지 될 것이다.
어떻게 가능합니까?
미리 감사드립니다.
내 오라클 스콧 스키마가 같은 테이블 목록을 포함Oracle의 스키마에서 테이블 목록을 삭제하는 방법은 무엇입니까?
'prefix_A'
'prefix_B'
'prefix_C'
'A'
'B'
'C'
지금 내가 같은 테이블 접두사 '접두어 _'를 포함하는 테이블의 목록을 드롭 할, 그러나 다른 테이블의 A, B는 C가 동일하게 유지 될 것이다.
어떻게 가능합니까?
미리 감사드립니다.
데이터 사전을 구동하는 동적 SQL을 사용하십시오.
begin
for trec in (select table_name
from user_tables
where table_name like 'PREFIX\_%' escape `\')
loop
dbms_output.put_line('dropping table ' || trec.table_name);
execute immediate 'drop table '||trec.table_name;
end loop;
end;
LIKE 절을 정확하게 사용하는 것이 좋습니다. 밑줄이 와일드 카드로 처리되지 않도록하려면 escape
키워드를 사용하십시오. 또는 substr(table_name, 1, 7) = 'PREFIX_'
을 사용하십시오.
10g 이상 및 the RECYCLE BIN is enabled에서 작업하고 있다면 잘못된 테이블을 삭제하는 것이 큰 재앙이 아니지만, 여전히 더 나은 방법은 아닙니다. 분명히 프로덕션에서는 이와 같은 코드를 실행하지 않지만 드롭 구문의 스크립트를 생성하는 원리를 사용합니다.
위의 코드는 종속성을 처리하지 않습니다. 당신이 접두사 테이블을 참조하는 외래 키가 있고 테이블의 낙하를 강제하려면이 추가 논리를 사용
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
이 외래 키 제약 조건을 삭제하지만, (이전) 종속 테이블을 떠난다.
@NayanPaul - 죄송합니다. MySQL 전문가가 아닙니다 : 별도의 질문을하셔야합니다 – APC
제약 조건을 해제하고 제약 조건을 삭제하고 테이블을 삭제하는 데이 방법을 사용했습니다.
-- disable constraints on tables
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND t.table_name like 'WF_%'
AND c.status = 'ENABLED'
ORDER BY c.constraint_type DESC)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
END LOOP;
END;
-- drop the constraints
begin
for r in (select table_name, constraint_name
from user_constraints where
table_name like 'WF_%')
loop
execute immediate 'alter table '||r.table_name
||' drop constraint '||r.constraint_name;
end loop;
end loop;
-- drop the tables
begin
for trec in (select table_name
from user_tables
where table_name like 'WF_%')
loop
execute immediate 'drop table '||trec.table_name|| ' purge';
end loop;
end;
자동 삭제 문에'purge'를 사용 하시겠습니까? 우리는 당신의 용감성에 감탄해야합니다! – APC
"삭제"라고 말하면 정말로 삭제합니까? 또는 DROP? 즉, 데이터를 지우거나 데이터 구조를 압축 할 수 있습니까? – APC
안녕하세요 APC, DROP을 원하고 구조 및 데이터를 삭제하십시오. – DBTutor