dos
Sqlplus

SQLPLUSの実行結果をCSVに出力したい(※可変長は可変長で)

More than 1 year has passed since last update.

SQLPLUSの実行結果をCSVに出力したい

業務で最近使うことになったのでメモ

<やりたいこと>
DOSバッチからSQLPLUSで以下のSQLファイルを実行し、
実行結果をCSVに出力する。
その際、可変長項目が固定長として出力されてしまうので以下のような記[undefined]()
述にする必要がある。

オプション 内容
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;

[undefined]()

これでうまくいった

ポイントは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

おーわり