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 件を取得できます。