2011年6月17日金曜日

OracleでPL/SQLを使って全てのビュー/テーブル/シーケンスを削除

スズキ

Oracleで何回もデータインポートなどの実験などやるときに、
汎用的な全てのビュー/テーブル/シーケンスを一気に削除する仕組みが欲しくなります。

なので、PL/SQLで作ってみました。

▼ ビュー(VIEW)の削除
SET LINESIZE 2000;
SET SERVEROUTPUT ON;
DECLARE
  ddl VARCHAR(2000);
BEGIN
  FOR cur IN (
    SELECT USER_VIEWS.VIEW_NAME
    FROM USER_VIEWS
  ) LOOP
    ddl := 'DROP VIEW ' || cur.VIEW_NAME;
    DBMS_OUTPUT.PUT_LINE(ddl);
    EXECUTE IMMEDIATE ddl;
  END LOOP;
END;
/

▼ テーブル(TABLE)の削除
SET LINESIZE 2000;
SET SERVEROUTPUT ON;
DECLARE
  ddl VARCHAR(2000);
BEGIN
  FOR cur IN (
    SELECT USER_TABLES.TABLE_NAME
    FROM USER_TABLES
  ) LOOP
    ddl := 'DROP TABLE ' || cur.TABLE_NAME;
    DBMS_OUTPUT.PUT_LINE(ddl);
    EXECUTE IMMEDIATE ddl;
  END LOOP;
END;
/

▼ シーケンス(SEQUENCES)の削除
SET LINESIZE 2000;
SET SERVEROUTPUT ON;
DECLARE
  ddl VARCHAR(2000);
BEGIN
  FOR cur IN (
    SELECT USER_SEQUENCES.SEQUENCE_NAME
    FROM USER_SEQUENCES
  ) LOOP
    ddl := 'DROP SEQUENCE ' || cur.SEQUENCE_NAME;
    DBMS_OUTPUT.PUT_LINE(ddl);
    EXECUTE IMMEDIATE ddl;
  END LOOP;
END;
/

"Oracle RDS"へのインポート(AL32UTF8以外から)がもうすぐ成功しそう...
--------
http://www.suz-lab.com

0 コメント: