@echo off
setlocal
set dbDir=D:\CloudscapeDatabases\yourdb
set schema=yourschema
set sqlFile=D:\scripts\cloudscape\SQL\createWASPerformanceTable.sql
echo ###################################################
echo # Run SQL on %computername%
echo ###################################################
set CLASSPATH=%CLASSPATH%;d:\IBM\Cloudscape_10.1\lib\derby.jar
set CLASSPATH=%CLASSPATH%;d:\IBM\Cloudscape_10.1\lib\derbyclient.jar
set CLASSPATH=%CLASSPATH%;d:\IBM\Cloudscape_10.1\lib\derbynet.jar
set CLASSPATH=%CLASSPATH%;d:\IBM\Cloudscape_10.1\lib\derbytools.jar
d:\tclBlendSun\bin\jtclsh.bat D:\scripts\TCL\JACL\cloudscape\runBatchSQL.tcl %dbDir% %schema% %sqlFile%
endlocal
====================================================================
#
# Run SQl.
#
####################################################################
# Patrick Finnegan 28/11/2005. V1.
# This script runs multiple sql statements delimited by ";" specified in the input file.
# Comments lines "--" are excluded.
####################################################################
puts "\n **** executing [info script] **** \n"
# make script drive independent.
set drive [lindex [file split [info script]] 0 ]
puts "\n proclib = $drive/scripts/TCL/proclib"
source $drive/scripts/TCL/proclib/checkFile_proc.tcl
source $drive/scripts/TCL/proclib/smtp_proc.tcl
source $drive/scripts/TCL/proclib/reportHeader_proc.tcl
####################################################################
# Connect to database.
####################################################################
proc connectDB { dbDir } {
puts "\n**********"
puts "connectDB"
puts "**********\n"
global env
global null
# load client driver
java::call Class forName org.apache.derby.jdbc.ClientDriver
append url jdbc:derby
append url ":"
append url "//"
append url $::env(COMPUTERNAME)
append url ":"
append url "1527"
append url "/"
append url $dbDir
puts "\n connection URL is: $url\n"
java::try {
set ConnectionI [ java::call DriverManager getConnection $url ]
} catch {SQLException SQLExceptionI } {
catchSqlException $SQLExceptionI
} catch {TclException e } {
puts "TCl Exception during Create Database: $url"
return -code error
}
java::lock $ConnectionI
return $ConnectionI
}
####################################################################
# parse the sql file.
####################################################################
proc parseSql { sql } {
puts "\n**********"
puts "Parse SQL"
puts "**********\n"
global env
global null
# split sql statements on newline eliminating blank lines.
set sqlList [ lsearch -all -inline -exact -not [ split $sql "\n" ] "" ]
# eliminate comment lines.
set statements [ lsearch -all -inline -not -regexp $sqlList "(?ni)^--" ]
# concat the statement list, delimit by ";", eliminate spaces.
set sqlParsed [ split [ eval concat $statements ] ";" ]
set sqlParsed [ lsearch -all -inline -exact -not $sqlParsed "" ]
puts "sqlParsed = $sqlParsed"
return $sqlParsed
}
####################################################################
# Run the sql statements.
####################################################################
proc runSQL { sql ConnectionI schema } {
puts "\n**********"
puts "Run SQL"
puts "**********\n"
global env
global null
# Get Metadata.
set DatabaseMetaDataI [ $ConnectionI getMetaData ]
if { [ $DatabaseMetaDataI supportsBatchUpdates ] } {
puts "SQL Batching is supported"
} else {
puts "SQL Batching is NOT supported"
return -code error
}
# Disable Auto Commit.
$ConnectionI setAutoCommit false
# create statement object
java::try {
set StatementI [ $ConnectionI createStatement ]
} catch {SQLException SQLExceptionI } {
catchSqlException $SQLExceptionI
} catch {TclException e } {
puts "TCl Exception during Create Statement"
return -code error $e
}
# Set Schema.
java::try {
$StatementI executeUpdate "set schema $schema"
} catch {SQLException SQLExceptionI } {
catchSqlException $SQLExceptionI
} catch {TclException e } {
puts "TCl Exception during Execute Statement"
return -code error $e
}
# Clear the statement object.
java::try {
$StatementI clearBatch
} catch {SQLException SQLExceptionI } {
catchSqlException $SQLExceptionI
} catch {TclException e } {
puts "TCl Exception during Execute Statement"
return -code error $e
}
set x 1
foreach i $sql {
puts "\nStatement $x :\n\n$i\n"
$StatementI addBatch $i
incr x
}
java::try {
$StatementI executeBatch
} catch {BatchUpdateException BatchUpdateExceptionI } {
catchBatchUpdateException $BatchUpdateExceptionI
} catch {SQLException SQLExceptionI } {
catchSqlException $SQLExceptionI
} catch {TclException e } {
puts "TCl Exception during Execute Statement"
return -code error $e
}
java::try {
set WarningsI [ $StatementI getWarnings ]
} catch {SQLException SQLExceptionI } {
catchSqlException $SQLExceptionI
} catch {TclException e } {
puts "TCl Exception during Execute Statement"
return -code error $e
}
if { $WarningsI == $null } {
puts "no SQL warnings "
} else {
puts " SQL warnings: [ $Warnings toString ] "
}
# Commit changes.
$ConnectionI commit
}
####################################################################
# proc - batchUpdateException.
####################################################################
proc catchBatchUpdateException { batchUpdateExceptionI } {
global AdminConfig
global AdminControl
global Help
global null
puts "\n**********"
puts "catchBatchUpdateException"
puts "**********\n"
set sqlCode [ $batchUpdateExceptionI toString ]
set sqlMessage [ $batchUpdateExceptionI getMessage ]
set errorCode [ $batchUpdateExceptionI getErrorCode ]
set sqlState [ $batchUpdateExceptionI getSQLState ]
if { $sqlCode != $null } { lappend msgList "sql code is: \t$sqlCode" }
if { $sqlMessage != $null } { lappend msgList "sql message is: \t$sqlMessage" }
if { $errorCode != $null } { lappend msgList "error code is: \t$errorCode" }
if { $sqlState != $null } { lappend msgList "sql state is: \t$sqlState\n" }
set SQLExceptionI [ $batchUpdateExceptionI getNextException ]
while { $SQLExceptionI != $null } {
set sqlCode [ $SQLExceptionI toString ]
set sqlMessage [ $SQLExceptionI getMessage ]
set errorCode [ $SQLExceptionI getErrorCode ]
set sqlState [ $SQLExceptionI getSQLState ]
set nextException [ $SQLExceptionI getNextException ]
if { $sqlCode != $null } { lappend msgList "sql code is: \t$sqlCode" }
if { $sqlMessage != $null } { lappend msgList "sql message is: \t$sqlMessage " }
if { $errorCode != $null } { lappend msgList "error code is: \t$errorCode" }
if { $nextException != $null } { lappend msgList "next exception is: \t$nextException" }
if { $sqlState != $null } { lappend msgList "sql state is: \t$sqlState" }
set SQLExceptionI [ $SQLExceptionI getNextException ]
}
return -code error $msgList
}
####################################################################
# proc - sqlException.
####################################################################
proc catchSqlException { SQLExceptionI } {
global AdminConfig
global AdminControl
global Help
global null
puts "\n**********"
puts "catchSqlException"
puts "**********\n"
set sqlCode [ $SQLExceptionI toString ]
set sqlMessage [ $SQLExceptionI getMessage ]
set errorCode [ $SQLExceptionI getErrorCode ]
set sqlState [ $SQLExceptionI getSQLState ]
if { $sqlCode != $null } { lappend msgList "sql code is: \t$sqlCode" }
if { $sqlMessage != $null } { lappend msgList "sql message is: \t$sqlMessage" }
if { $errorCode != $null } { lappend msgList "error code is: \t$errorCode" }
if { $sqlState != $null } { lappend msgList "sql state is: \t$sqlState\n" }
while { $SQLExceptionI != $null } {
puts "\nget SQL Exception\n"
set sqlCode [ $SQLExceptionI toString ]
set sqlMessage [ $SQLExceptionI getMessage ]
set errorCode [ $SQLExceptionI getErrorCode ]
set sqlState [ $SQLExceptionI getSQLState ]
if { $sqlCode != $null } { lappend msgList "sql code is: \t$sqlCode" }
if { $sqlMessage != $null } { lappend msgList "sql message is: \t$sqlMessage " }
if { $errorCode != $null } { lappend msgList "error code is: \t$errorCode" }
if { $sqlState != $null } { lappend msgList "sql state is: \t$sqlState" }
set SQLExceptionI [ $SQLExceptionI getNextException ]
}
return -code error $msgList
}
####################################################################
# Main Control.
####################################################################
puts "\n argc = $argc \n"
if {$argc < 3 } {
return -code error "\nerror - not enough arguments supplied.\nSupply db directory, schema and sql file."
}
set dbDir [ lindex $argv 0 ]
set schema [ lindex $argv 1 ]
set sqlFile [ lindex $argv 2 ]
set computerName $::env(COMPUTERNAME)
checkFile $dbDir
checkFile $sqlFile
set sql [ read [ open $sqlFile r ] ]
puts "\nSQL:\n$sql\n"
#call java package
package require java
set null [ java::null ]
# import required classes
java::import java.sql.Connection
java::import java.sql.DriverManager
java::import java.sql.SQLWarning
java::import java.sql.Statement
java::import org.apache.derby.jdbc.ClientDriver
puts "\nimported classes are:\n"
foreach i [java::import] {
puts [ format "%-5s %-50s" " " $i ]
}
if { [ catch { connectDB $dbDir } r ] == 0 } {
set ConnectionI $r
lappend msgList "***** Connected to $dbDir *****"
if { [ catch { runSQL [ parseSql $sql ] $ConnectionI $schema } r ] == 0 } {
lappend msgList "***** SQL run successfully *****."
} else {
lappend msgList "***** SQL ERROR *****."
lappend msgList $r
}
} else {
lappend msgList "\n***** Failed to connect to $dbDir *****.\n"
lappend msgList $r
}
foreach i $msgList {
puts $i
}