お久しぶりです。
皆様のお力をお借りしたいです。
【やりたいこと】
ローカルのbat実行で、
対象環境のOracleDBから
テーブル,ビューの一覧と、そのテーブルごとの全カラムを出力する
【実施想定】
ローカルにはconf.batと、getTblName.bat、getViewName.bat、getColName.bat,DBMaintTool.batを用意
conf.batにはoracle接続に必要な環境情報を保持
getTblName.batにはテーブルの一覧を出力するsqlを発行しそれをList1に保存
getViewName.batにはビューの一覧を出力するsqlを発行しそれをList2に保存
getColName.batには、List1,List2をそれぞれループさせ、各テーブルの物理名からカラム一覧を出力
DBMaintTool.batはこれらすべてのbatの呼び出しを行う
また、これらに伴うlogが出力可能であれば、本batにてlogを出力したい。
以下途中経過となりますが、不明点があります。
①batからsqlをsqlplusに投げ、結果をリスト格納する方法
②batからリスト内の文字列を順次取り出し、別のsql分の中に格納し結果取得する方法
③最終的な【やりたいこと】で記載した出力結果をexcelなどに出力する方法
分からないことだらけで恐縮ですが、ご回答お願いいたします。
以下、現状で想定しているbatとsqlのコードとなります。
bat
1rem conf.bat 2rem 共通環境情報/Oracle接続情報 3set DB_USER=*** 4set DB_PASS=*** 5set DB_HOST=*** 6set DB_PORT=*** 7set DB_NAME=***
bat
1rem getTblName.bat 2
bat
1rem getViewName.bat
bat
1rem getColName.bat
bat
1rem DBMaintTool.bat 2@ echo off 3setlocal enabledelayedexpansion 4 5rem ------------------------- 6rem 内部変数定義 7rem ------------------------- 8set errcode=0 9 10rem ------------------------- 11rem バッチ処理開始ログコンソール出力 12rem ------------------------- 13echo バッチ開始:%date% %time:~0,8% 14 15rem 環境情報セット 16call conf.bat 17 18rem SQLplus開始 19sqlplus %DB_USER%/%DB_PASS%@%DB_HOST%:%DB_PORT%/%DB_NAME% 20 21rem ------------------------- 22rem 実行結果取得 23rem ------------------------- 24set errcode=%errorlevel% 25 26rem ------------------------- 27rem バッチ処理終了ログコンソール出力 28rem ------------------------- 29if %errcode% == 0 ( 30 echo %msgtext%正常終了:%date% %time:~0,8% 31 exit %errcode% 32) else ( 33 echo %msgtext%異常終了:%date% %time:~0,8% 34 exit %errcode% 35) 36 37rem 最終的な結果(テーブル名一覧、ビュー一覧、それぞれのテーブル、ビューのカラム一覧を出力) 38--実施方法不明 39
sql
1-- テーブル一覧取得クエリ(getTblName.batから呼び出し想定) 2SET ECHO OFF 3SET FEEDBACK OFF 4SET PAGESIZE 50000 5SET TERMOUT OFF 6SET TRIMSPOOL ON 7SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WRAPPED 8SPOOL list_table_name.log 9SELECT TABLE_NAME 10FROM USER_TABLES 11WHERE DROPPED = 'NO' -- Oracle10g以降はWindowsでいうゴミ箱機能が追加されたので条件の追加が必要 12ORDER BY TABLE_NAME; 13SPOOL OFF
sql
1-- ビュー一覧取得クエリ(getViewName.batから呼び出し想定) 2SET ECHO OFF 3SET FEEDBACK OFF 4SET PAGESIZE 50000 5SET TERMOUT OFF 6SET TRIMSPOOL ON 7SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WRAPPED 8SPOOL list_table_name.log 9SELECT VIEW_NAME 10FROM USER_VIEWS 11WHERE DROPPED = 'NO' -- Oracle10g以降はWindowsでいうゴミ箱機能が追加されたので条件の追加が必要 12ORDER BY VIEW_NAME; 13SPOOL OFF 14
sql
1-- テーブルのカラム一覧取得クエリ 2SELECT 3 ,COLUMN_NAME 4FROM 5 ALL_TAB_COLUMNS 6WHERE 7 TABLE_NAME = 'LIST1' --どう実施するか不明 8ORDER BY 9 COLUMN_ID 10;
sql
1-- ビューのカラム一覧取得クエリ 2SELECT 3 ,COLUMN_NAME 4FROM 5 ALL_TAB_COLUMNS 6WHERE 7 VIEW_NAME = 'LIST2' --どう実施するか不明 8ORDER BY 9 COLUMN_ID 10;