2010年1月5日火曜日

groovyとoracleでテーブルのDDL文を取得する

groovyとoracleでテーブルのDDL文を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

table_name = 'EMP'
query = """
select dbms_metadata.get_ddl('TABLE', ${table_name}) as ddl,
length(dbms_metadata.get_ddl('TABLE', ${table_name})) as lenddl
from dual
"""
sql.eachRow(query){
println("ddl:${it.ddl.getSubString(1L, (int)it.lenddl)}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBMS_METADATA

2010年1月4日月曜日

groovyとSQL Serverで待機に関する情報を表示する

groovyとSQL Serverで待機に関する情報を表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select * from sys.dm_os_wait_stats
order by wait_time_ms desc
"""
// 待機に関する情報を取得する
sql.eachRow(query){
// 待機の種類の名前
println("wait_type:${it.wait_type}")
// 待機の数
println("waiting_tasks_count:${it.waiting_tasks_count}")
// 総待機時間
println("wait_time_ms:${it.wait_time_ms}")
// 最大待機時間
println("max_wait_time_ms:${it.max_wait_time_ms}")
// シグナルを受け取ってから実行するまでの時間
println("signal_wait_time_ms:${it.signal_wait_time_ms}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.dm_os_wait_stats (Transact-SQL)

groovyとJFreeChartで折れ線グラフを描画する

groovyとJFreeChartで折れ線グラフを描画するには、以下のコードを実行します。

import org.jfree.chart.*
import org.jfree.chart.plot.*
import org.jfree.data.category.*

dcd = new DefaultCategoryDataset()
dcd.with {
addValue(100, "ABC Inc.", "Jan 2010")
addValue(110, "ABC Inc.", "Feb 2010")
addValue(120, "ABC Inc.", "Mar 2010")
addValue(90, "DEF Corp.", "Jan 2010")
addValue(120, "DEF Corp.", "Feb 2010")
addValue(110, "DEF Corp.", "Mar 2010")
}

jfc = ChartFactory.createLineChart(
"売上推移",
"年月",
"売上",
dcd,
PlotOrientation.VERTICAL,
true,
false,
false)

ChartUtilities.saveChartAsPNG(new File("./line.png"), jfc, 300, 200)


出力画像(line.png)

※Grabを使用する場合は、以下の行を先頭に追加します。
@Grab(group='jfree', module='jfreechart', version='1.0.12')

動作環境
・JDK1.6 Update 15, groovy 1.6.3, JFreeChart1.0.13, JCommon1.0.16
・groovy 1.8.2, JDK6 Update27, jfreechart 1.0.12

関連情報
JFreeChart

2010年1月3日日曜日

groovyとSQL Serverでテーブルのインデックスをリビルドする

groovyとSQL Serverでテーブルのインデックスをリビルドするには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table_name = 'fragment1'
query = """
alter index all on """ + table_name + """ rebuild
"""
//
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
ALTER INDEX (Transact-SQL)

grailsで画像を加工する

grailsで画像を加工するには、以下のようなコードを実行します。

import javax.imageio.*

class ImageController {

def index = {
def img = ImageIO.read(new File("/home/kyle/SF.JPG"))
// 枠の描画
def gr = img.createGraphics()
gr.setColor(new java.awt.Color(200, 180, 180))
gr.fillRect(0, 0, img.width, 10)
gr.fillRect(0, 0, 10, img.height)
gr.fillRect(img.width-10, 0, img.width, img.height)
gr.fillRect(0, img.height-10, img.width, img.height)
gr.dispose()
// BufferedImageの出力
response.contentType = "image/jpeg"
ImageIO.write(img, "jpg", response.outputStream)
}
}


元画像(SF.JPG)


出力画像


動作環境
JDK1.6 update15, groovy 1.6.3, grails 1.2.0

2010年1月2日土曜日

groovyとSQL Serverでテーブルのプライマリーキー情報を取得する

groovyとSQL Serverでテーブルのプライマリーキー情報を取得するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table_name = 'company_dept'
query = """
exec sp_pkeys @table_name = ${table_name}
"""
// テーブルのプライマリーキーの情報を取得
sql.eachRow(query){
// テーブルオーナー
println("table_owner:${it.table_owner}")
// テーブル名
println("table_name:${it.table_name}")
// カラム名
println("column_name:${it.column_name}")
// キーシーケンス
println("key_seq:${it.key_seq}")
// PK名
println("pk_name:${it.pk_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_pkeys (Transact-SQL)

2010年1月1日金曜日

groovyとSQL Serverでインデックスの断片化情報を取得する

groovyとSQL Serverでインデックスの断片化情報を取得するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
SELECT tab.name as table_name,
ind.name as index_name,
partition_number,
index_type_desc, alloc_unit_type_desc,
index_depth, avg_fragmentation_in_percent,
fragment_count, avg_fragment_size_in_pages,
avg_page_space_used_in_percent, record_count,
min_record_size_in_bytes, max_record_size_in_bytes,
avg_record_size_in_bytes
FROM sys.dm_db_index_physical_stats(DB_ID('test1'),
NULL, NULL, NULL, 'SAMPLED') ps
join sys.tables tab
on (ps.object_id = tab.object_id)
join sys.indexes ind
on ( ps.object_id = ind.object_id
and ps.index_id = ind.index_id)
"""
// インデックスの断片化情報を取得
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// インデックス名
println("index_name:${it.index_name}")
// パーティション番号
println("partition_number:${it.partition_number}")
// インデックスの種類の説明
println("index_type_desc:${it.index_type_desc}")
// インデックスレベルの数
println("index_depth:${it.index_depth}")
// インデックスの断片化
println("avg_fragmentation_in_percent:${it.avg_fragmentation_in_percent}")
// 断片化の数
println("fragment_count:${it.fragment_count}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.dm_db_index_physical_stats (Transact-SQL)