###########################################################
# Connect to Oracle using Type 4 Java driver.
###########################################################
#########################################################  
## Source packages. 
#########################################################  
#
package require java
#################################################################
# putsLog with timestamp.
####################################################################
proc putsLog { a } {
    set host [ info host ]
    set compTime [clock format [clock seconds] -format "%Y-%m-%d-%H.%M.%S"]
    puts "\[$host:$compTime\] $a"
}
#######################################
## Proc - oracleConnect. 
#######################################
proc oracleConnect { serverName databaseName portNumber driverType username password sqlQuery } {
   putsLog "proc - [info level 0 ]"
   # import required classes 
   java::import java.sql.Connection
   java::import java.sql.DriverManager
   java::import java.sql.ResultSet
   java::import java.sql.SQLWarning
   java::import java.sql.Statement
   java::import java.sql.ResultSetMetaData 
   java::import java.sql.DatabaseMetaData 
   java::import oracle.jdbc.OracleDatabaseMetaData
   # load database driver .
   java::call Class forName oracle.jdbc.OracleDriver 
   # set the connection url.
   append url jdbc:oracle:thin
   append url :
   append url $username
   append url /
   append url $password
   append url "@"
   append url $serverName
   append url :
   append url $portNumber
   append url :
   append url $databaseName
   putsLog "connection URL is:  $url\n"   
   
   set ConnectionI [ java::call DriverManager getConnection $url ] 
   putsLog "transaction isolation level is [ $ConnectionI getTransactionIsolation ]"
   putsLog "#########################################"
   putsLog "### Database connection details"
   putsLog "#########################################"
   # get the database metadata information.
   #Retrieves a DatabaseMetaData object that contains metadata about the database
   #to which this Connection object represents a connection.
   set DatabaseMetaDataI [ $ConnectionI getMetaData ]
   putsLog [ $DatabaseMetaDataI getDatabaseProductName ]
   putsLog [ $DatabaseMetaDataI getDatabaseProductVersion ]
   putsLog "database version [ $DatabaseMetaDataI getDatabaseMajorVersion ]\.[ $DatabaseMetaDataI getDatabaseMinorVersion ]"
   putsLog "driver version   [ $DatabaseMetaDataI getDriverName ] [ $DatabaseMetaDataI getDriverMajorVersion ]\.[ $DatabaseMetaDataI getDriverMinorVersion ]"
   putsLog "jdbc version     [ $DatabaseMetaDataI getJDBCMajorVersion  ]\.[ $DatabaseMetaDataI getJDBCMinorVersion  ]"
   putsLog "connect username [ $DatabaseMetaDataI getUserName ]"
   putsLog "transaction isolation level is [ $ConnectionI getTransactionIsolation ] \n"
   # get a list of table names in database.
   # if there are no tables the results set is empty.  
   set opt1 [java::field ResultSet TYPE_SCROLL_INSENSITIVE]
   set ResultSetI [ $DatabaseMetaDataI getCatalogs ]
   set ResultSetMetaDataI [ $ResultSetI getMetaData ] 
  
   set columnCount        [ $ResultSetMetaDataI getColumnCount ]
   putsLog "Column Count is $columnCount"
   set i 1
   while { $i <= $columnCount } {
       set columnName [ $ResultSetMetaDataI getColumnName $i ]
      
       lappend columnList $columnName
       incr i 
   }    
   unset i
   putsLog $columnList 
   $ResultSetI  close 
   $ConnectionI close
}
######################################
# Main Control.
######################################
putsLog "executing [info script]"
# make script drive independent.
set drive [lindex [file split [info nameofexecutable]] 0 ] 
set reportFile   C:\\reports\\oracleConnect.txt
set reportFileId [ open $reportFile w ] 
set serverName   xxxx
set databaseName xxxx
set portNumber   1234
set driverType   4
set username     xxxx
set password     xxxx
set sqlQuery "select * from aaaa.bbbb where char(customer) like '287554%'"  
oracleConnect $serverName $databaseName $portNumber $driverType $username $password $sqlQuery