悩めるSEの雑記です

日々思いつくがままです

Oracleでテスト結果(DBのスナップショット)を簡単にとる

テストエビデンスをとるのに、A5mk2でSQL複数を一気に実行して、手でエクセルへコピーしていました。 これはあまりに無駄なので * SQLスクリプトで実行し、標準出力へ出力する * Clipコマンドでクリップボードへ格納する * 書式を文字列としたエクセルワークシートへ貼り付ける * 後でお決まりの表書式を反映する * スクリプト内で「select xx from dual:」を使えばコメントなども含ますことができる

はず。これ仕事復帰したらやってみる(今は契約都合で少しだけ振替でお休み中)

SET ECHO OFF
SET TERMOUT ON
SET TRIMOUT ON
SET FEEDBACK OFF
SET PAGESIZE 0
SET LINESIZE 32767
SET WRAP OFF
SET HEADING OFF


-- 実行日時
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '取得'  FROM DUAL;
SELECT CHR(13) || CHR(10) FROM DUAL;
SELECT CHR(13) || CHR(10) FROM DUAL;


-- --------------------------------------
-- 1テーブル分
-- --------------------------------------
-- お見出し
SET HEADING OFF
SELECT '■ユーザ一覧' FROM DUAL;

-- 列名
SELECT 'USERNAME' || CHR(9) || 'USER_ID' FROM DUAL;

-- 値
SELECT
    USERNAME || CHR(9) || USER_ID
FROM
    ALL_USERS;
    
-- 改行
SELECT CHR(13) || CHR(10) FROM DUAL;
SELECT CHR(13) || CHR(10) FROM DUAL;


EXIT;

実行時はサイレントモードで。

sqlplus -S your_username/your_password@your_tns_alias @output.sql > RESULT.TSV

今回はUTF-8でTSVファイルへ出力する想定です。最初日本語が文字化けしたので、NLS_LANG設定を追加で行いました。

set NLS_LANG=JAPANESE_JAPAN.AL32UTF8

(2025/07/05 追記) SQLを格納したファイルのエンコードUTF-8でした。SJISにするとここまで文字化けしていたクリップボード利用も問題ありませんでした。

sqlplus -S /@XE as sysdba @DB_SELECT.sql | clip