Welcome, guest | Sign In | My Account | Store | Cart
@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

}

History