a.batをたたくと流れるsqlを作成しています。
sql
1set echo off 2set linesize 1000 3set pagesize 0 4set trimspool on 5set feedback off 6set colsep ',' 7set feedback off 8set heading off 9set verify off 10set term off 11 12col spool_file_name new_value spool_file_name format a100 13SELECT '試験台帳' || to_char(sysdate,'_YYYYMMDDHH24MISS') || '.csv' spool_file_name FROM dual; 14SELECT 'ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4' FROM dual; 15SELECT 16 ho.data1, 17 ho.data2, 18 '', 19 hu.data3 20FROM 21 Hoge_mst ho, 22 Huge_mst hu 23WHERE 24 ho.Id = hu.Id 25 26
このようなSQLが現在あり、a.batをたたくとbatファイルで指定されたフォルダにcsvファイルが生成されるようになっています。
現在、csvをsakuraエディタで開くと、
ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4,
試験データ1,試験データ2, ,試験データ4
のように出力されます。
そして今回やりたいことが2点あり、
一つは、出力されたデータを""でくくられた状態で出力したい。
もう一つは、空のデータの際に作成される空白行を削除したい。
の二点です。
表示的にはこのようなものを目指しています。
ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4,
"試験データ1","試験データ2","","試験データ4"
set trimspool onなどで空白行が削除できなかったのと、
||'"'||という文字列連結?の方法を試してみたのですが、
記述が誤っているからか、うまく表示できませんでした。
以下試してみたSQL
sql
1set echo off 2set linesize 1000 3set pagesize 0 4set trimspool on 5set feedback off 6set colsep ',' 7set feedback off 8set heading off 9set verify off 10set term off 11set trimspool on --追加 12 13col spool_file_name new_value spool_file_name format a100 14SELECT '試験台帳' || to_char(sysdate,'_YYYYMMDDHH24MISS') || '.csv' spool_file_name FROM dual; 15SELECT 'ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4' FROM dual; 16SELECT 17 ||'"'||ho.data1||'"'||, 18 ||'"'||ho.data2||'"'||, 19 '""', 20 ||'"'||hu.data3||'"'|| 21FROM 22 Hoge_mst ho, 23 Huge_mst hu 24WHERE 25 ho.Id = hu.Id 26
やりたいこと二点を実装するためにはどうすればよろしいでしょうか。
お願いします。
追記 ttyp03さんのコメントを元にsqlを書き直しました。
sql
1set echo off 2set linesize 1000 3set pagesize 0 4set trimspool on 5set feedback off 6set colsep ',' 7set feedback off 8set heading off 9set verify off 10set term off 11set trimspool on --追加 12 13col spool_file_name new_value spool_file_name format a100 14SELECT '試験台帳' || to_char(sysdate,'_YYYYMMDDHH24MISS') || '.csv' spool_file_name FROM dual; 15SELECT 'ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4' FROM dual; 16SELECT 17 '"'||ho.data1||'"', 18 '"'||ho.data2||'"', 19 '""', 20 '"'||hu.data3||'"' 21FROM 22 Hoge_mst ho, 23 Huge_mst hu 24WHERE 25 ho.Id = hu.Id 26 27
その後のcsvファイルはこのようになっています。
ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4,
"試験データ1","試験データ2","" ,"試験データ4"
なぜ3つ目のデータのところになぞ空白が入ってくるのでしょう。
ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4,
"試験データ1","試験データ2","","試験データ4"
こうしたいです。
追記2
出来ました。
sql
1set echo off 2set linesize 1000 3set pagesize 0 4set trimspool on 5set feedback off 6set colsep ',' 7set feedback off 8set heading off 9set verify off 10set term off 11set trimspool on --追加 12 13col spool_file_name new_value spool_file_name format a100 14SELECT '試験台帳' || to_char(sysdate,'_YYYYMMDDHH24MISS') || '.csv' spool_file_name FROM dual; 15SELECT 'ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4' FROM dual; 16SELECT 17 '"'||ho.data1||'"'||','|| 18 '"'||ho.data2||'"'||','|| 19 '""'||','|| 20 '"'||hu.data3||'"' 21FROM 22 Hoge_mst ho, 23 Huge_mst hu 24WHERE 25 ho.Id = hu.Id
selectの,←これも||''||でくくると表示できるようです。
BAは最初に解答してくれたttyp03さんに差し上げます。
回答1件
あなたの回答
tips
プレビュー