LoginSignup
11

More than 5 years have passed since last update.

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

Posted at

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

おーわり

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11