oracleのSELECT結果をテキストに出力する
現場で提供していただいている 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 件を取得できます。