横向けになっている表定義から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