横向けになっている表定義からSELECT文を作成します。
INSERT文の時とは異なり、sqlplusで実行できるようファイル出力しています。
また、sqlplusでSELECT文を実行するとVARCHAR2、CHARのどちらでもスペース埋めされて
結果が確認し難いので、項目ごとをパイプで結合して出力しています。
この辺sqlplusのオプションで解決出来るようにして欲しいです。
Oracleのカテゴリでも記載しましたが、「SET TRIMSPOOL ON」は行末だけという。
前提条件はコメントに記載の通り。
※DATE型に対するTO_DATEは手動。
Sub SqlSelectCreate() ' ' SqlSelectCreateYoko Macro ' ' テーブル名、項目名からSELECT文を自動生成します。 ' ' A1:テーブル名 ' A2~C2:項目名(論理名) ' A3~C3:項目名(物理名) ' A4~C4:型 ' A5~C5:サイズ ' 上記状態の時にマクロを実行する。(テーブル名、項目名(論理名)、型を利用します。) ' SQL文用変数を宣言する。 Dim sql As String Dim sqlSelect As String Dim sqlColumn As String Dim sqlFrom As String sqlSelect = "SELECT " Dim i As Long Dim MaxCol As Long MaxCol = Range("A2").End(xlToRight).Column For i = 1 To MaxCol Step 1 Cells(2, i).Activate sqlColumn = sqlColumn & ActiveCell.Value & " || '" & Chr(9) & "' || " Next i sqlColumn = Left(sqlColumn, Len(sqlColumn) - 10) sqlFrom = " FROM " & Cells(1, 1).Value & ";" sql = sqlSelect & sqlColumn & sqlFrom Open "D:/select_" & Cells(1, 1) & ".sql" For Output As #1 Print #1, "set autotrace off" Print #1, "set echo off" Print #1, "set timing on" Print #1, "set time off" Print #1, "set termout off" Print #1, "set feedback 1" Print #1, "set colsep '" & Chr(9) & "'" Print #1, "set pagesize 30000" Print #1, "set linesize 30000" Print #1, "set trimspool on" Print #1, Print #1, "col PLAN_PLUS_EXP Format a200;" Print #1, Print #1, "spool select_" & Cells(1, 1) & ".log;" Print #1, Print #1, "prompt ======================" Print #1, "prompt; データ取得" Print #1, "prompt ======================" Print #1, sql Print #1, Print #1, "set autotrace off" Print #1, "spool off;" Close #1 End Sub