IT Soldier Sakuri !!

Oracle使い。いつのまにかIT戦士になってしまったさくりの可哀想な奮闘記。

Oracle活用 バッチで定期的に処理

毎月最初の月曜日は千疋屋の食べ放題の予約があるんだけど、
なんと!1年ぶりに予約が取れました~~~!
やったぁ!!
……と思ったら、4000円だったのに、6000円に値上げ?!
1.5倍の値上げとはちょっと強気過ぎない?
うう~ん、迷うなぁ。


例えば、毎日の売上なんかを定期的に取得したいなんてときの方法を。

特定のフォルダに[任意の名前].sqlというファイルを作成します。
todays_sales.sql

set colsep ','
set trimspool on

column log_date new_value log_date_text noprint
select to_char(sysdate,'yyyymmddhh24miss') log_date from dual;
spool sales_&log_date_text._list.csv

select * from employees
where department_id = '30'
/

spool off
exit

中身はこんな感じ。売上じゃないけど…。

ポイントは、この3行。
これでファイル名に日付時刻が入るので、毎日実行してもファイル名が重複しない!
※1日1回ならyyyymmddだけでもいいかも。

column log_date new_value log_date_text noprint
select to_char(sysdate,'yyyymmddhh24miss') log_date from dual;
spool sales_&log_date_text._list.csv

コマンドプロンプトを立ち上げて、こんな感じで実行。

C:\Users\SAKURI\sql>sqlplus hr/hr@XE @C:\Users\SAKURI\sql\todays_sales.sql

ファイルができました!
f:id:itsoldiersakuri:20150803222950p:plain

中身もこんな感じ。
f:id:itsoldiersakuri:20150803223019p:plain

本当に中身だけを出力したくて、「6行が選択されました。」を出したくない場合は、

set feedback off 「~行が選択されました」を非表示にする

これを追加で設定しておけばOK!!

これでWindowsならタスクバーにでも設定しておけば定期的にデータやログの取得が簡単にできちゃう。