Oracleの開発環境では、テストデータのリセットやテーブル・シーケンスの再作成など、初期状態に戻す処理が定期的に必要になります。手動で実行すると手間がかかり、ミスの原因にもなりかねません。
そこで本記事では、Oracleの開発環境を一括で初期化できるSQLスクリプトの作成例を紹介します。
一括初期化スクリプトの構成
初期化スクリプトには、以下のような処理を組み合わせて記述します。
- テーブルの削除と再作成
- シーケンスのリセット
- テストデータの投入
- マスターデータの保持
初期化スクリプトの例
-- テーブル削除(存在する場合のみ)
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE users CASCADE CONSTRAINTS';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
-- テーブル作成
CREATE TABLE users (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
email VARCHAR2(100),
created_at DATE DEFAULT SYSDATE
);
-- シーケンス再作成
BEGIN
EXECUTE IMMEDIATE 'DROP SEQUENCE users_seq';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -2289 THEN
RAISE;
END IF;
END;
/
CREATE SEQUENCE users_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
-- テストデータ投入
INSERT INTO users (id, name, email) VALUES (users_seq.NEXTVAL, '山田 太郎', 'yamada@example.com');
INSERT INTO users (id, name, email) VALUES (users_seq.NEXTVAL, '佐藤 花子', 'sato@example.com');
COMMIT;
マスターデータを保護したい場合
マスターデータなどは削除せずに初期データとして保持したいケースがあります。その場合はWHERE句で対象を限定します。
DELETE FROM users WHERE id > 1000;
このように、IDやフラグなどで対象を絞って削除することで、必要なデータだけ初期化できます。
SQL*Plusスクリプトとしての運用
上記のSQLをスクリプトファイル(例:reset_dev.sql
)として保存し、以下のようにSQL*Plusから一括実行できます。
sqlplus user/password@dbname @reset_dev.sql
開発チーム内で共通の初期化処理として活用することで、環境差異やヒューマンエラーを減らすことができます。
まとめ
Oracleの開発環境では、定期的な初期化処理が求められます。今回紹介したようなスクリプトを作成・共有することで、手間の削減と品質向上が図れます。
マスターデータの保護や、条件付き削除など、実際の環境に合わせた調整を行い、柔軟に運用しましょう。