仕事で、テーブルデータをXMLで取得する必要が
あったので、書いたgroovyスクリプト。
10分くらいでなぐり書きしたので、見た目の良さとか
処理効率についてはご勘弁を。
ちなみに、oracle専用です。
実行すると標準出力にXMLがわらわら出てきます。
// // vim: set ts=2 sw=2 et ft=java: // import java.io.File import groovy.sql.Sql import groovy.xml.MarkupBuilder // 実際のDBの情報を設定 sql = Sql.newInstance("JDBC URL", "JDBC USER ID", "JDBC PASSWORD", "JDBC DRIVER") tableNamesList = [] sql.eachRow("select table_name from user_tables"){ tables | tableNamesList.add(tables.table_name) } println '<?xml version="1.0" encoding="Shift_JIS"?>' xml = new MarkupBuilder() xml.tables(){ tableNamesList.each{ tableName | columnDataList = [] map = null sql.eachRow("select column_name, data_type, data_length from user_tab_columns where table_name = ${tableName}"){ columnData | map = ["columnName":columnData.column_name, "dataType":columnData.data_type, "dataLength":columnData.data_length] columnDataList.add(map) map = null } selectPart = columnDataList.collect{ it.columnName }.join(",") // 何故か"select ${selectPart} from ${tableName}"ってやるとエラーになる・・ dataFetchSql = "select " + selectPart + " from " + tableName xml.table(name:tableName){ sql.eachRow(dataFetchSql){ rowData | xml.row(){ columnValue = null columnDataList.each{ columnData | columnValue = rowData.getString(columnData.columnName) columnValue = (columnValue == null) ? "" : columnValue xml.column(name:columnData.columnName, value:columnValue, type:columnData.dataType, length:columnData.dataLength) } } } } } }
Groovyは後発のスクリプト言語なので
rubyとかpythonのいいところどりをしていて
なかなかイイ感じ。
ruby知っている人にはわかり易い言語だと思います。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ