oracleのSELECT結果をテキストに出力する

2008.4.16

現場で提供していただいているPCで作業をしていると、いつも自分が使っているツールが無く、プロンプトからコマンドを実行して、結果をテキストに出力する。と言うことがたまにあったりします。

今回は、OracleでSELECT文を発行して、結果をテキストファイルに出力し、その後エクセルでデータをまとめたりしていたのですが、、、

単純にSELECT文を投げてリダイレクトしていると、一々ヘッダー行?が数レコードごとにテキストに書き込まれてしまい、非常に困ります。

そこで、今回知った情報を記述しておきます。

まず、どのようなコマンドを実行しているかというと、以下のようなよくある?コマンドです。

>sqlplus user_name/user_pass@host @sql_file > output_file

ここで指定しているsql_fileに、次のようなコードを記述しておきます。

SET LINESIZE 1000;
SET PAGESIZE 500;

こうすることで、行は1000文字で改行され、500行で1ページとして扱われるようになるため、わずらわしいヘッダー?のような行が500行ごとに出力されるようになります。

結果の上位数百行を出力したいとき、便利です。

ちなみに、oracleで抽出行数を制限したいときは、以下のようにします。

SELECT * FROM TABLE WHERE ROWNUM <= 100

このようにすると、上位100件が抽出されます。

何か条件を指定して、その結果から上位100を取得したいときは、以下のようにします。

SELECT
    *
FORM (
    SELECT
        FIELD1
    FROM
        TABLE
    GROUP BY
        FIELD1
)
WHERE
    ROWNUM <= 100

このようにすると、サブクエリの結果の上位100件を取得できます。