#SQLPLUSの実行結果をCSVに出力したい
業務で最近使うことになったのでメモ
<やりたいこと>
DOSバッチからSQLPLUSで以下のSQLファイルを実行し、
実行結果をCSVに出力する。
その際、可変長項目が固定長として出力されてしまうので以下のような記
述にする必要がある。
オプション | 内容 |
---|---|
echo off | コンソールメッセージを非表示 |
linesize | 1行のサイズを決める |
pagesize | 指定した行数毎にセパレーターが入る |
feedback off | 「X行が選択されました」を非表示 |
test.sql
set echo off
set linesize 1000
set pagesize 0
set feedback off
spool 'c:\tmp.csv'
SELECT EMP_NAME ||','||
ADDRESS1 ||','||
ADDRESS2 ||','||
ADDRESS3
FROM EMP;
spool off
exit;
これでうまくいった
ポイントはSELECT項目の横に「|| ',' ||」をつけるだけ
が、欲を言えば、上記SELECT項目に列名(AS "")を付けて出力したい。。
色々試してはみたが上手くいかずお手上げー
以上!
ちなみに呼出側のバッチは以下
test.bat
echo off
rem **********************
rem 初期化処理
rem **********************
SET BASEDIR=%~dp0
SET LOG=%BASEDIR%log\%date:~0,4%%date:~5,2%%date:~8,2%_test.log
SET LISTFILE=%BASEDIR%%date:~0,4%%date:~5,2%%date:~8,2%_resultCsvFile.csv
SET SQLFILE=%BASEDIR%sql\test.sql
SET UID=*****
SET PASS=*****
SET SID=*****
rem **********************
rem ログ初期処理
rem **********************
ECHO バッチ処理を開始します >> %LOG%
ECHO 開始時刻:%DATE%%TIME% >> %LOG%
Rem SQL実行
echo /* 接続情報 */ >> %LOG%
echo %UID%/%PASS%@%SID% >> %LOG%
sqlplus -s %UID%/%PASS%@%SID% @%SQLFILE% %LISTFILE%
Rem SQL実行結果判定
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
REM 正常終了
goto NORMAL
Rem **********************
Rem 正常終了
Rem **********************
:NORMAL
ECHO バッチを正常終了します >> %LOG%
ECHO 終了時刻:%DATE%%TIME% >> %LOG%
ECHO エラーコード:%ERRORLEVEL% >> %LOG%
EXIT /B
Rem **********************
Rem 異常終了
Rem **********************
:ERROR
ECHO バッチを異常終了します >> %LOG%
ECHO 終了時刻:%DATE%%TIME% >> %LOG%
ECHO エラーコード:%ERRORLEVEL% >> %LOG%
EXIT /B
echo on
おーわり