Giter Club home page Giter Club logo

go-oci8's Introduction

go-oci8

GoDoc Reference Build Status Go Report Card

Description

Golang Oracle database driver conforming to the Go database/sql interface

Installation

Install Oracle full client or Instant Client:

https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

Install a C/C++ compiler

Install pkg-config, edit your package config file oci8.pc (examples below), then set environment variable PKG_CONFIG_PATH to oci8.pc file location (Or can use Go tag noPkgConfig then setup environment variables CGO_CFLAGS and CGO_LDFLAGS)

Go get with Go version 1.9 or higher

go get github.com/mattn/go-oci8

Try the simple select example:

https://godoc.org/github.com/mattn/go-oci8#example-package--SqlSelect

If you have a build error it is normaly because of a misconfiguration, make sure to search close issues for help

oci8.pc Examples

Windows

prefix=/devel/target/XXXXXXXXXXXXXXXXXXXXXXXXXX
exec_prefix=${prefix}
libdir=C:/app/instantclient_12_2/sdk/oci/lib/msvc
includedir=C:/app/instantclient_12_2/sdk/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: oci8
Description: oci8 library
Libs: -L${libdir} -loci
Cflags: -I${includedir}
Version: 12.2

Linux

prefix=/devel/target/XXXXXXXXXXXXXXXXXXXXXXXXXX
exec_prefix=${prefix}
libdir=/usr/lib/oracle/12.2/client64/lib
includedir=/usr/include/oracle/12.2/client64

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: oci8
Description: oci8 library
Libs: -L${libdir} -lclntsh
Cflags: -I${includedir}
Version: 12.2

MacOs

Please install pkg-config with brew if not already present. Download the instant client and the sdk and unpack it e.g. in your Downloads folder and create therein a file names oci8.pc. Please replace <username> with your actual username.

prefixdir=/Users/<username>/Downloads/instantclient_12_2/
libdir=${prefixdir}
includedir=${prefixdir}/sdk/include

Name: OCI
Description: Oracle database driver
Version: 12.2
Libs: -L${libdir} -lclntsh
Cflags: -I${includedir}

You also have to set these environment variables (e.g. permanently by adding them to your .bashrc)

export LD_LIBRARY_PATH=/Users/<username>/Downloads/instantclient_12_2
export PKG_CONFIG_PATH=/Users/<username>/Downloads/instantclient_12_2

SQL Examples

SQL examples can be found in the GoDoc reference:

https://godoc.org/github.com/mattn/go-oci8

And in _example:

https://github.com/mattn/go-oci8/tree/master/_example

Author

Yasuhiro Matsumoto (a.k.a mattn)

Special Thanks

Jamil Djadala

go-oci8's People

Contributors

andreynering avatar antmanler avatar button-chen avatar cbandy avatar clarksoncj avatar djadala avatar doylecnn avatar fishpadak avatar jackielii avatar jprobinson avatar jszwedko avatar k4p7 avatar lggomez avatar lnxbil avatar lucio-santi avatar marknieweglowski-tc avatar mattn avatar michaels11 avatar modgravert avatar pvelder avatar ricsmania avatar stampy88 avatar tgulacsi avatar vamitrou avatar veqryn avatar wenhaochen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-oci8's Issues

Use port 1521 as default

It would be nice if I could pass a DSN as machine/instance instead of machine:1521/instance.

It seems to bem that these lines try to do this, however when SplitHostPort returns an error the host is not set, so it doesn't work.

go-oci8/oci8.go

Lines 389 to 395 in 3e4e9fb

host, port, err := net.SplitHostPort(u.Host)
if err != nil {
if err.Error() == "missing port in address" {
return nil, fmt.Errorf("Invalid DSN: %q %v", dsnString, err)
}
port = "1521"
}

I tried setting the host inside the if block, but that caused the TNS names lookup to stop working.

Placeholder syntax for prepared statements

The database/sql documentation uses ? for the placeholder(s) in prepared statements but I can't get that to work in go-oci8. It seems that I have to use :1, :2, etc as placeholders instead. Is that intentional?

Install Problems Windows

When i try to install go-oci8 on Windows 7 32bit i get the following error:

mkrnac@1003PFN001 /mnt/c/developer/documents/goworkspace/src/pfde-papgft.de.pepperl-  fuchs.com/zer_svn/it.octopus.go
$ go get github.com/mattn/go-oci8
# github.com/mattn/go-oci8
c:/oracle/product/11.2.0/instantclient_11_2/sdk/lib/msvc/oci.lib: error adding symbols: File in wrong format
collect2: Fehler: ld gab 1 als Ende-Status zurück

my oci8.pc looks like

libdir=c:/oracle/product/11.2.0/instantclient_11_2/sdk/lib/msvc
includedir=c:/oracle/product/11.2.0/instantclient_11_2/sdk/include

gcclib=C:/developer/portableapps/cygwin/lib/gcc/i686-pc-cygwin/4.8.3/include
gccinclude=C:/developer/portableapps/cygwin/lib/gcc/i686-pc-cygwin/4.8.3/include

Name: oci8
Description: oci8 library
Version: 11.2.0.3.0
Libs: -L${libdir} -L${gcclib} -loci
Libs.private: 
Cflags: -I${includedir} -I${gccinclude}

gcc version:

$ gcc -v
Es werden eingebaute Spezifikationen verwendet.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.8.3/lto-wrapper.exe
Ziel: i686-pc-cygwin
Konfiguriert mit: /cygdrive/i/szsz/tmpp/gcc4/gcc-4.8.3-2.i686/src/gcc-4.8.3/configure --srcdir=/cygdrive/i/szsz/tmpp/gcc4/gcc-4.8.3-2.i686/src/gcc-4.8.3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --disable-__cxa_atexit --with-dwarf2 --with-arch=i686 --with-tune=generic --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libada --enable-libjava --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --libexecdir=/usr/lib
Thread-Modell: posix
gcc-Version 4.8.3 (GCC)

How to build for Mac OS X (Mavericks)

When I run "go build" it fails with these messages:

github.com/mattn/go-oci8

could not determine kind of name for C.OCIHandleAlloc
could not determine kind of name for C.OCIParamGet
could not determine kind of name for C.OCIDefineByPos
could not determine kind of name for C.free
could not determine kind of name for C.strlen

I'm using commit f9084c8 of go-oci8.

gcc --version reports this:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

"go version" reports:

go version go1.1.2 darwin/amd64

My oci8.pc file contains this:

prefix=/usr/local/lib/instantclient_11_2
libdir=${prefix}
includedir=${prefix}/sdk/include

Name: OCI
Description: Oracle Database Engine
Version: 11.2
Libs: -L${libdir} -lclntsh
Libs.private:
Cflags: -I${includedir} -Qunused-arguments

Periodic core dump

I have a webapp written in using this driver, it makes one sql instance and re-uses that everywhere. Periodically the app core dump. The app doesn't do much more then queries and output the results as json. Not always on the same query, seems like it sometimes goes even when not running a query.

I'm using oracle 9i with driver 11.2 on fedora 16 with gcc version 4.6.3. Haven't figured out how to get the core dump yet, currently just get a message of:

Trace/breakpoint trap (core dumped) ./bin/site

Only return 1 record but there are 22 records.

I use docker and wnameless/oracle-xe-11g as development environment. And the connection information is

hostname: localhost 
port: 49161 
sid: xe 
username: system 
password: oracle

I connect it from Navicat Preminum, and query it. I got 22 records.
But when I query via go-oci8, I got only 1 record.
Below is the query string.

SELECT column_name,data_default,data_type,data_length,data_precision,data_scale,nullable FROM USER_TAB_COLUMNS WHERE table_name = 'DEF$_DESTINATION'

Error when using Query inside goroutine

I use Windows 7 x64 with Oracle Instant Client 12.1 x64. When trying to Query inside a GoRoutine, I get some errors, that can either be:

  • Generic "the application stopped working" Windows message, with exit codes like 3958377386.
  • KPEDBG_HDL_PUSH_FCPTRMAX error from Oracle
  • KPEDBG_HDL_POP_FCPTR error from Oracle

Below is a code example that causes the errors:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/mattn/go-oci8"
    "runtime"
    "sync"
    "time"
)

func trace(startTime time.Time) {
    endTime := time.Now()
    fmt.Println(endTime.Sub(startTime))
}

func main() {
    runtime.GOMAXPROCS(8)
    db := connect()
    defer db.Close()
    times := 1000
    var wg sync.WaitGroup
    wg.Add(times)
    for i := 1; i <= times; i++ {
        go func() {         
            exec(db)
            wg.Done()
        }()
    }
    wg.Wait()
}

func connect() *sql.DB {
    db, err := sql.Open("oci8", "user/[email protected]:1521/orcl")
    fmt.Println(db)
    if err != nil {
        fmt.Println(err)
        return nil
    }
    return db
}

func exec(db *sql.DB) {
    defer trace(time.Now())
    rows, err := db.Query(`select 1 from dual`) // This works better when replaced by a query that takes a long time, like 1 second or so
    if err != nil {
        fmt.Println(err)
    }
    defer rows.Close()

    for rows.Next() {
        var num int
        rows.Scan(&num)
        println(num)
    }
}

Go install fails while installing in linux mint

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgcvpc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxnftu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lbivor'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemgpd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfimkpth'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswPclose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswFopen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpInstrNSub'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxchk'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmlinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ons_subscriber_registercallback'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `pz5ckcallb7'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstyield'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemptfs'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldiutzd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCntChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxu4TstClsIsCompatibleChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltsmxi'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfplnx2d'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpminitm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfps2de'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmblax'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraStreamHandle'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxpfl'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwspax'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxnucoptg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmalpx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwdigx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpf2lnx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxdyn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstclo'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstrj'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstmup'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsrbsx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstrep'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmdigx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraMemFree'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstjn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lditzver'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmgbv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFclose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssMemMalloc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFflush'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfps2cfe'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFwrite'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lputerm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxregcomp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateDateSubtract'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateArrayToLocalArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateArrayFromLocalArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmtos'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfStatn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterFromArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFptc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmaacb'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkUnistr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpuclose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcddrv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterCheck'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcpwrite'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsVldStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstss'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmftm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdge'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterInterAdd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstcl'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lempfsec'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `Slfgfn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtIntCreate'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxldd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhnlangid'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdle'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiskb'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterFromTZ'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmmhpinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoWriWChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterFromString'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsmxd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiTimeZoneShift'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswPipe'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxmin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraStreamClose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsThrIsNull'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhname2id'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiren'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateInterAddTZ'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateFromArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sslssalck'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxldini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsThndIsNull'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SltsPrRead'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxabs'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateFromStringU'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmmhpfree'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpfeq'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ons_init_wconfig_ctx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateCheck'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemfaa'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmexitprog'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmatterm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxfcn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraMemAlloc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpln'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterFromTZU'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmx_get_ser_version'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmntm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ons_shutdown_wtimeout_ctx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxlfterm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhlmod'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxu4TstClsXMLPubidChar0'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxeti'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhclrsave'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcv42h'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpuopen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxlterm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmngid'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slsta2e'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssMemRealloc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtIntDestroy'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltspcinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxstiu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxneg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateToArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsTrnStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sldxgd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxtru'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFopen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lctbnam'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkInstr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slcdalloc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCntChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateTimeArrayUpgrade'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfilen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SltsPrDestroy'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraStreamWriteChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhnmod'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstprint'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpReplaceLob'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxint'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxu4CnvCase'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltspin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiParseForInput'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sslssmodhdlr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxstdu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiParseForInputTypeU'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemchk'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfplnx2cd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfvinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCntByte'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxqgtpi'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpd2s'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwgrax'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpcd2cf'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraPropGet'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpcd2s'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmtnl10'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCntByte'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmstm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkLikPatPref'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltstidd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `Sls8FrTextErr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwxdix'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmopen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcpinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxumsgbcmt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterInterConvert'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhdvld'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpuinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxcopy'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCnvEqui'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsThrIsSame'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmgonv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateFromLocalArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lehpdt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltskydestroy'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxpow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpcf2lnx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsulen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxnbeg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssMemFree'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmtnpow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmeswap'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfLseek'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtStrBeginIter'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateConstruct'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsmxi'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfClose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdsqrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpInstrLobNSub'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrminiu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCnvNumStrToInt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFseekn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltspcsignal'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxuCpCplrStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtStrCreate'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxsto'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lempfrec'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhlod'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `pz7arlcl'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxuAddToStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxpd2n'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateConstructN'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswPopen'
//usr/lib/libnnz12.so: undefined reference to `sltsimt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxatz'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfitcl'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfifpo'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltskyc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxsdc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcscpn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgpth'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfStat'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxbex'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lbivffs'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltrgftime64'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxdyf'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltskys'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswDup'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmgetcompctx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiTimeZoneAdjust'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraMemInit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdne'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxgtz'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgcnv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxcsDeCompose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhLaToId'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtIntEndIter'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstprintf'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdlt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfitrim'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpcdcoerce'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmgiv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxumsicmt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFsync'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateCompare'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxqgtzero'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxsni'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswDlclose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoSkip'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgt2u'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxbegin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpCountLob'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCnvSimple'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxinc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SltsPrUnlock'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `pz5strt7'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpminit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemged'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ons_subscriber_cancelcallback'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstai'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `mql_init'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmloadpkg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sslssunreghdlr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsrsrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxadm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slnxmul'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxnur'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsmna'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcpopen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxnpdp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstgi'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtIntBeginIter'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcvd2e'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkLike'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `pz5goto7'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswFclose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfdi'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxads'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfiniu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfcln'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtIntInsert'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmdei'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slzgetevar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxnucopt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmfwtx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterToArray'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmttpow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SltsPrInit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ons_error_set'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmpst'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slcgems'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmtnatof'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwalpx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sslsigreghndlr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfps2cfdlnxe'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxfcnu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SldirOpen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slste2a'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhasc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswRecvSockFd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxu4TstClass'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdeq'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsima'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswSocket'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxsqr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdisnan'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmsatrm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiwr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsStrCol'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiflu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfLseekn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateDateOverlap'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpSubstrLobNSub'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmtprime'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxdtsu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxmxsz'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcprecv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCpStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmmkpri'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxmdsz'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmx_check_ser_version_compat'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpComp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhcnv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slzsetevar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiParseForOutputU'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcv42b'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxite'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkAsciistr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiskbn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfitlb'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slosDep2Mesg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpabs'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswPthread_mutex_trylock'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateDateConvert'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxregexec'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxXmlIdConv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `pz5ctxfr7'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcvb2w'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfimknam'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpuparse'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgXmlConv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtStrDestroy'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxu4Property'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ltmtxp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmbteqx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFgts'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsthndinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxqgtone'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhLangEnv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxgfs'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `gethrtime'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lehpcmp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCpToOp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxrou'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxldfcb'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdgt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfilenn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterConstruct'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterDivide'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsThndIsSame'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lempfsic'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiopn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfigfn'
//usr/lib/libnnz12.so: undefined reference to `lxsNormStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtStrEndIter'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpuread'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfvini2'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpcfcoerce'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterToStringU'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCpChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwCmpStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdsgn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmmfree'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfilini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxnxd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcvb2bg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpinit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfps2cde'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmgsp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxx_parse_context_term'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateToLDX'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgXmlPcnv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemdec'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfAccess'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswDlopen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcplisten'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfvpkgname'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterToTN'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCpStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCpFrWide'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsimr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxsti'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstup'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsttokr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswClose'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsthan'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcpread'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemces'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slnxadd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpdneg'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfitcn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraMemCalloc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmmtophp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lempbas'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfipthad'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhh2ci'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhnmap'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lctbval'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmsps'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpd2f'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxdtd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssltstraise'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcvb24'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lficrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmcpen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateExtract'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxftd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateFromLiteral'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltspcwait'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmapd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxflo'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sslsetprec'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfifini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltster'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhidtolang'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxwc2lx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmxconpar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxXmlCvEsc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhcsn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstiddestroy'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SlfFopen2'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxXmlPrologueParser'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkCSConvTest'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slnxsub'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lstmlo'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfpcf2s'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxdsupsn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ons_thread_stacksize'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateToString'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemgef'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfps2fe'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltstspawn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiParseContextInit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfdrm'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lrmini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `pz5spus7'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxcpn'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhddump'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoVldStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterToStringISO'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxu4SchChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraStreamWrite'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxmctex'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxuCnvNumStrToInt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slfpd2lnx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxend'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateInterSubtract'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsfpv'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfignam'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCmpNStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxsca'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsbcpu'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiInterCompare'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraStreamReadChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxoCvChar'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxfpr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgratio'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lemptfr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `SldirCount'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `OraStreamIsOpen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lsrsrx'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldigtzd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhsftime'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxuStrLen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltmdf'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateFromString'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmsaicmt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lmsacin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtStrInsert'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltspcbroadcast'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiPrecisionCode'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ssOswOpen'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sltsini'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lficls'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxcmp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slputcpaccept'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgt2uc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfitell'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slmtnatol'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfiabt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxgcnvc'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmarrfuncs'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxhchtoid'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lfifex'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxuCmpStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `sLdiGetDate'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lcmrtb'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slosFillInt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxXmlGEntEsc2'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lpmdelete'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LhtStrYield'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCnvIntToNumStr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `LdiDateInterAdd'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `slcvs2ptr'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxsCntDisp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `ldxdts'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxdisp2num'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lxkRegexpLikeLob'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libclntsh.so: undefined reference to `lnxcmp'
collect2: error: ld returned 1 exit status

concurrent connects crash + solution

I have used a previous version of the driver to connect to two remote databases over slow connection, therefore setting up the connection was done in parallel. This crashed now and then with SEGV's as the malloc() in the client library are not necessarily thread safe.

The solution is to use different calls to setup the initial environment,
and to set the OCI_THREADED option:

Here is the diff:

@@ -70,22 +72,19 @@ func (d *OCI8Driver) Open(dsn string) (driver.Conn, error) {
        token := strings.SplitN(dsn, "@", 2)
        userpass := strings.SplitN(token[0], "/", 2)

-       rv := C.OCIInitialize(
-               C.OCI_DEFAULT,
+       rv := C.OCIEnvCreate(
+               (**C.OCIEnv)(unsafe.Pointer(&conn.env)),
+               C.OCI_THREADED,
+               nil,
                nil,
                nil,
                nil,
+               0,
                nil)
        if rv == C.OCI_ERROR {
                return nil, ociGetError(conn.err)
        }

-       rv = C.OCIEnvInit(
-               (**C.OCIEnv)(unsafe.Pointer(&conn.env)),
-               C.OCI_DEFAULT,
-               0,
-               nil)
-
        rv = C.OCIHandleAlloc(
                conn.env,
                &conn.err,

CLOB values truncated

Since c7646f1 CLOBs are no longer working properly. Let's say I have a table with a CLOB column and 3 rows. Row 1 has a CLOB of length 100, row 2 is 1000 and row 3 is 10000. If I query the 3 rows all the CLOBs are truncated to 100 characters.

If I invert the order, then the values are correct. It seems the length of the CLOB in one row interferes with the next.

Example below:

create table clobtest (id number, value clob);

insert into clobtest values(1, rpad(' ', 100, '1234567890-'));

insert into clobtest values(2, rpad(' ', 1000, '1234567890-'));

insert into clobtest values(3, rpad(' ', 10000, '1234567890-'));

commit;
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/mattn/go-oci8"
)

func main() {
    db, err := sql.Open("oci8", "system/[email protected]:1521/orcl")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer db.Close()

    rows, err := db.Query("select id, value from clobtest order by id")
    if err != nil {
        fmt.Println(err)
    }
    defer rows.Close()

    var id int
    var value sql.NullString

    for rows.Next() {
        rows.Scan(&id, &value)
        if value.Valid {
            fmt.Println("------------------------")
            fmt.Printf("Row: %d, length: %d \n", id, len(value.String))
            fmt.Println(value.String)
        }
    }
}

This prints as:

------------------------
Row: 1, length: 100
 1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-
------------------------
Row: 2, length: 100
 1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-
------------------------
Row: 3, length: 100
 1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-

If, however, I invert the order of the query:

rows, err := db.Query("select id, value from clobtest order by id desc")

then it prints correctly:

Row 3
4000
 1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456789
0-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345678
90-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567
890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456
7890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345
67890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234
567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123
4567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12
34567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1
234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-
1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890
-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456789
0-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345678
90-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567
890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456
7890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345
67890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234
567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123
4567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12
34567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1
234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-
1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890
-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456789
0-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345678
90-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567
890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456
7890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345
67890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234
567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123
4567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12
34567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1
234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-
1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890
-1234567890-1234567890-1234567890-123456
------------------------
Row 2
1000
 1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456789
0-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345678
90-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567
890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456
7890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12345
67890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234
567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123
4567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-12
34567890-1234567890-1234567890-123456789
------------------------
Row 1
100
 1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-

Cannot have last column as date

When doing a select where the last column is a date type the value is an empty slice and results in an index out of bounds error when parsing the value into a date on line 777 of oci8.go.

How to use Prepare Stat?

it always error:

db.Exec("insert into foo(?)", "abc") 

but this is working:

db.Exec("insert into foo('abc')") 

Maybe a serious issue:RowsAffected returns 0 after success insert or update or delete!

package main
import (
"database/sql"
"fmt"
"os"
_ "github.com/mattn/go-oci8"
)

var connStr string = "cms/cmsadmin@ORCL"

func main() {
os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8")
db, err := sql.Open("oci8", connStr)
if err != nil {
panic(err)
}
defer db.Close()
SQL := INSERT INTO CMS."dxh"(CMS."dxh"."id", CMS."dxh"."content") VALUES ('dxh','my test data my test data')
res,_:=db.Exec(SQL)
aa,e:=res.RowsAffected()
fmt.Println(aa,e) //aa is always 0, whatever insert or update or delete
}

GCC fatal error - No input files

Hi. I get this error after go get:

bueno@felipe-cb:~/devel/go/src/github.com/mattn/go-oci8$ go get github.com/mattn/go-oci8
# github.com/mattn/go-oci8
gcc: warning: '-x c' after last input file has no effect
gcc: fatal error: no input files
compilation terminated.

GCC Version:

bueno@felipe-cb:~/devel/go/src/github.com/mattn/go-oci8$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-5) 

Oracle Home:

bueno@felipe-cb:~/devel/go/src/github.com/mattn/go-oci8$ ls -la $ORACLE_HOME
total 16
drwxr-xr-x 4 root root 4096 Fev 21 12:50 .
drwxr-xr-x 3 root root 4096 Jan 21 07:07 ..
drwxr-xr-x 2 root root 4096 Jan 21 07:07 bin
lrwxrwxrwx 1 root root   33 Fev 21 12:50 include -> /usr/include/oracle/12.1/client64
drwxr-xr-x 2 root root 4096 Jan 21 07:07 lib

Include dir:

bueno@felipe-cb:/usr/lib/oracle/12.1/client64/include$ cd $ORACLE_HOME/include 
bueno@felipe-cb:/usr/lib/oracle/12.1/client64/include$ ls -la
total 1676
drwxr-xr-x 2 root root   4096 Jan 21 07:07 .
drwxr-xr-x 3 root root   4096 Jan 21 07:07 ..
-rw-r--r-- 1 root root  44851 Mai 24  2013 ldap.h
-rw-r--r-- 1 root root  36543 Mai 24  2013 nzerror.h
-rw-r--r-- 1 root root  74825 Mai 24  2013 nzt.h
-rw-r--r-- 1 root root  11586 Mai 24  2013 occiAQ.h
-rw-r--r-- 1 root root  34750 Mai 24  2013 occiCommon.h
-rw-r--r-- 1 root root  72561 Mai 24  2013 occiControl.h
-rw-r--r-- 1 root root  39934 Mai 24  2013 occiData.h
-rw-r--r-- 1 root root   2115 Mai 24  2013 occi.h
-rw-r--r-- 1 root root  24778 Mai 24  2013 occiObjects.h
-rw-r--r-- 1 root root   7203 Mai 24  2013 oci1.h
-rw-r--r-- 1 root root  10361 Mai 24  2013 oci8dp.h
-rw-r--r-- 1 root root 434446 Mai 24  2013 ociap.h
-rw-r--r-- 1 root root   6204 Mai 24  2013 ociapr.h
-rw-r--r-- 1 root root  43001 Mai 24  2013 ocidef.h
-rw-r--r-- 1 root root   4048 Mai 24  2013 ocidem.h
-rw-r--r-- 1 root root  11782 Mai 24  2013 ocidfn.h
-rw-r--r-- 1 root root   8953 Mai 24  2013 ociextp.h
-rw-r--r-- 1 root root 188312 Mai 24  2013 oci.h
-rw-r--r-- 1 root root   6494 Mai 24  2013 ocikpr.h
-rw-r--r-- 1 root root   7468 Mai 24  2013 ocixmldb.h
-rw-r--r-- 1 root root 104865 Mai 24  2013 ocixstream.h
-rw-r--r-- 1 root root  23483 Mai 24  2013 odci.h
-rw-r--r-- 1 root root   6540 Mai 24  2013 oratypes.h
-rw-r--r-- 1 root root  15083 Mai 24  2013 orid.h
-rw-r--r-- 1 root root 102775 Mai 24  2013 ori.h
-rw-r--r-- 1 root root 157901 Mai 24  2013 orl.h
-rw-r--r-- 1 root root  42626 Mai 24  2013 oro.h
-rw-r--r-- 1 root root 123766 Mai 24  2013 ort.h
-rw-r--r-- 1 root root   9892 Mai 24  2013 xa.h

Lib dir:

bueno@felipe-cb:/usr/lib/oracle/12.1/client64/include$ cd $ORACLE_HOME/lib
bueno@felipe-cb:/usr/lib/oracle/12.1/client64/lib$ ls -la
total 212884
drwxr-xr-x 2 root root      4096 Jan 21 07:07 .
drwxr-xr-x 4 root root      4096 Fev 21 12:50 ..
-rw-r--r-- 1 root root       342 Mai 24  2013 glogin.sql
lrwxrwxrwx 1 root root        21 Jan 21 07:07 libclntshcore.so -> libclntshcore.so.12.1
-rw-r--r-- 1 root root   6750135 Mai 24  2013 libclntshcore.so.12.1
lrwxrwxrwx 1 root root        17 Jan 21 07:07 libclntsh.so -> libclntsh.so.12.1
-rw-r--r-- 1 root root  55453863 Mai 24  2013 libclntsh.so.12.1
-rw-r--r-- 1 root root   6277261 Mai 24  2013 libnnz12.so
lrwxrwxrwx 1 root root        15 Jan 21 07:07 libocci.so -> libocci.so.12.1
-rw-r--r-- 1 root root   2523156 Mai 24  2013 libocci.so.12.1
-rw-r--r-- 1 root root 136162781 Mai 24  2013 libociei.so
-rw-r--r-- 1 root root    152544 Mai 24  2013 libocijdbc12.so
-rw-r--r-- 1 root root    330074 Mai 24  2013 libons.so
-rw-r--r-- 1 root root    114225 Mai 24  2013 liboramysql12.so
-rw-r--r-- 1 root root   1561402 Mai 24  2013 libsqlplusic.so
-rw-r--r-- 1 root root   1535672 Mai 24  2013 libsqlplus.so
-rw-r--r-- 1 root root   3370513 Mai 24  2013 ojdbc6.jar
-rw-r--r-- 1 root root   3378365 Mai 24  2013 ojdbc7.jar
-rw-r--r-- 1 root root    311339 Mai 24  2013 ottclasses.zip
-rw-r--r-- 1 root root     35927 Mai 24  2013 xstreams.jar

Does anyone know what is wrong?

Thanks in advance!

How do I compile?

Any guidance on how I can compile this? I tried some of the examples given for other c-go projects but it doesn't seem to work for me.

Thanks

ORA-12545: Connect failed because target host or object does not exist

I'm trying to use go-oci8 on my project which is developed on osx. I already prepare the oracle instantclient and everything, and finally it's working by using sqlplus.

This is my tnsnames.ora.

210=(DESCRIPTION=
        (ADDRESS_LIST=
            (ADDRESS=
                (PROTOCOL=TCP)
                (HOST=192.168.0.210)
                (PORT=1521)
            )
        )
        (CONNECT_DATA=
            (SID=ORCL)
            (SERVER=DEDICATED)
            (SERVICE_NAME=orcl.my.local)
        )
    )

This is the env.

export ORACLE_HOME=/Applications/oracle/instantclient_11_2
export PKG_CONFIG_PATH=$ORACLE_HOME/pkg
export GO_OCI8_CONNECT_STRING="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.210)(PORT=1521)))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)(SERVICE_NAME=orcl.my.local)))"
export ORACLE_SID="ORCL"
export DYLD_LIBRARY_PATH=$ORACLE_HOME:$DYLD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME
It's working fine when I use sqlplus, sqlplus scott/tiger@210.

Connect using sqlplus


There is a problem whenever I tried to connect from golang. I use go-oci8 example to test it.

I have put oci8.pc file inside $PKG_CONFIG_PATH and below is the content of the file.

orainc=/Applications/oracle/instantclient_11_2/sdk/include
oralib=/Applications/oracle/instantclient_11_2

Name: oci8
Description: Oracle Instant Client
Version: 12.1
Cflags: -I${orainc}
Libs: -L${oralib} -lclntsh

Everytime I execute the file, it always ended up in this error.

ORA-12545: Connect failed because target host or object does not exist

Can't connect to oracle server from golang

Could you help me solve this problem? Am I missing something? Thank you in advance.

Selecting CLOB's?

Should it be possible to select CLOB's? Im not sure if I am encountering a missing feature or a bug. What I am seeing when I try to select a clob is this:

>  go run handbook-compare.go
SIGBUS: bus error
PC=0x5992514
signal arrived during cgo execution

runtime.cgocall(0x40015f0, 0x37bf1d98)
    /usr/local/go/src/pkg/runtime/cgocall.c:149 +0x10c fp=0x37bf1d8c
github.com/mattn/go-oci8._Cfunc_OCIStmtFetch(0x40c0fa7c, 0x40be8ae0, 0x1, 0x2, 0x0, ...)
    github.com/mattn/go-oci8/_obj/_cgo_defun.c:169 +0x31 fp=0x37bf1d98
github.com/mattn/go-oci8.(*OCI8Rows).Next(0x17b5b440, 0x17b5b480, 0x4, 0x4, 0x0, ...)
    /Users/jacob/Dropbox/go/src/github.com/mattn/go-oci8/oci8.go:592 +0x5a fp=0x37bf1e28
database/sql.(*Rows).Next(0x17b5c0f0, 0x17b870b0)
    /usr/local/go/src/pkg/database/sql/sql.go:1509 +0xb1 fp=0x37bf1e54
main.readSchemaXml(0x17b6f040, 0x40d2148, 0x7, 0x0, 0x0, ...)
    /Users/jacob/Dropbox/go/src/uom/handbook/feed/handbook-compare.go:54 +0x21a fp=0x37bf1f48
main.main()
    /Users/jacob/Dropbox/go/src/uom/handbook/feed/handbook-compare.go:28 +0x196 fp=0x37bf1f98
runtime.main()
    /usr/local/go/src/pkg/runtime/proc.c:220 +0xff fp=0x37bf1fcc
runtime.goexit()
    /usr/local/go/src/pkg/runtime/proc.c:1394 fp=0x37bf1fd0

goroutine 3 [chan receive]:
database/sql.(*DB).connectionOpener(0x17b6f040)
    /usr/local/go/src/pkg/database/sql/sql.go:574 +0x3b
created by database/sql.Open
    /usr/local/go/src/pkg/database/sql/sql.go:436 +0x1c7

goroutine 4 [chan receive]:
database/sql.(*DB).connectionOpener(0x17b6f080)
    /usr/local/go/src/pkg/database/sql/sql.go:574 +0x3b
created by database/sql.Open
    /usr/local/go/src/pkg/database/sql/sql.go:436 +0x1c7

goroutine 5 [syscall]:
runtime.goexit()
    /usr/local/go/src/pkg/runtime/proc.c:1394

eax     0x0
ebx     0x34
ecx     0x40c04870
edx     0x40bfd160
edi     0x40c0dea0
esi     0x440
ebp     0xbfff9988
esp     0xbfff98a0
eip     0x5992514
eflags  0x10202
cs      0x1b
fs      0x0
gs      0xf
exit status 2

Go 1.3 will require you to change (*C.OCIServer)(s.c.svc) to (*C.OCISvcCtx)(s.c.svc)

In Go 1.2 and earlier, any C struct that is only declared, never defined, and used only via pointers ("sealed") was turned into [0]byte. This meant that mismatched struct types went undetected. Go 1.3 gets rid of this behavior, making each declared struct type unique.

Your code has, in several places, lines of the form

    rv := C.OCIStmtExecute(
        (*C.OCIServer)(s.c.svc),

However, according to the docs, the first parameter to OCIStmtExecute() must be a OCISvcCtx. So the code will need to be changed to

    rv := C.OCIStmtExecute(
        (*C.OCISvcCtx)(s.c.svc),

to compile in Go 1.3.

This was discovered while trying to get this package working for @RGidron on his Mavericks setup on Gopher Academy's Slack server; after working with him for a bit I found this error (I was familiar with this misbehavior when it broke my ui package when it tried to use Cairo types).

make go-oci8 error

hi mattn:

i got bellow errors when make  go-oci8 , how to fix this?

C:\Go\src\pkg\github.com\mattn\go-oci8>go get github.com/mattn/go-oci8

github.com/mattn/go-oci8

oci8.go:9: error: enumerator value for __cgo_enum__0' not integer constant oci8.go:11: error: enumerator value for__cgo_enum__1' not integer constant
oci8.go:13: error: enumerator value for __cgo_enum__2' not integer constant oci8.go:15: error: enumerator value for__cgo_enum__3' not integer constant
oci8.go:17: error: enumerator value for __cgo_enum__4' not integer constant oci8.go:19: error: enumerator value for__cgo_enum__5' not integer constant
oci8.go:21: error: enumerator value for __cgo_enum__6' not integer constant oci8.go:23: error: enumerator value for__cgo_enum__7' not integer constant
oci8.go:25: error: enumerator value for __cgo_enum__8' not integer constant oci8.go:27: error: enumerator value for__cgo_enum__9' not integer constant
oci8.go:29: error: enumerator value for __cgo_enum__10' not integer constant oci8.go:31: error: enumerator value for__cgo_enum__11' not integer constant
oci8.go:33: error: enumerator value for __cgo_enum__12' not integer constant oci8.go:35: error: enumerator value for__cgo_enum__13' not integer constant
oci8.go:39: error: enumerator value for __cgo_enum__15' not integer constant oci8.go:43: error: enumerator value for__cgo_enum__17' not integer constant
oci8.go:45: error: enumerator value for __cgo_enum__18' not integer constant oci8.go:47: error: enumerator value for__cgo_enum__19' not integer constant
oci8.go:49: error: syntax error before "sb4"
oci8.go:51: error: syntax error before "OraText"
oci8.go:53: error: syntax error before "OCIBind"
oci8.go:55: error: syntax error before "int"
oci8.go:57: error: syntax error before "OCIError"
oci8.go:59: error: syntax error before "OCIEnv"
oci8.go:61: error: syntax error before "ub2"
oci8.go:63: error: syntax error before "ub4"
oci8.go:65: error: syntax error before "OCIServer"
oci8.go:67: error: syntax error before "size_t"
oci8.go:69: error: syntax error before "OCIDefine"
oci8.go:71: error: syntax error before "OCIStmt"
oci8.go:73: error: syntax error before "char"
oci8.go:75: warning: initialization makes integer from pointer without a cast
oci8.go:75: error: initializer element is not computable at load time
oci8.go:75: error: (near initialization for __cgodebug_data[0]') oci8.go:76: warning: initialization makes integer from pointer without a cast oci8.go:76: error: initializer element is not computable at load time oci8.go:76: error: (near initialization for__cgodebug_data[1]')
oci8.go:77: warning: initialization makes integer from pointer without a cast
oci8.go:77: error: initializer element is not computable at load time
oci8.go:77: error: (near initialization for __cgodebug_data[2]') oci8.go:78: warning: initialization makes integer from pointer without a cast oci8.go:78: error: initializer element is not computable at load time oci8.go:78: error: (near initialization for__cgodebug_data[3]')
oci8.go:79: warning: initialization makes integer from pointer without a cast
oci8.go:79: error: initializer element is not computable at load time
oci8.go:79: error: (near initialization for __cgodebug_data[4]') oci8.go:80: warning: initialization makes integer from pointer without a cast oci8.go:80: error: initializer element is not computable at load time oci8.go:80: error: (near initialization for__cgodebug_data[5]')
oci8.go:81: warning: initialization makes integer from pointer without a cast
oci8.go:81: error: initializer element is not computable at load time
oci8.go:81: error: (near initialization for __cgodebug_data[6]') oci8.go:82: warning: initialization makes integer from pointer without a cast oci8.go:82: error: initializer element is not computable at load time oci8.go:82: error: (near initialization for__cgodebug_data[7]')
oci8.go:83: warning: initialization makes integer from pointer without a cast
oci8.go:83: error: initializer element is not computable at load time
oci8.go:83: error: (near initialization for __cgodebug_data[8]') oci8.go:84: warning: initialization makes integer from pointer without a cast oci8.go:84: error: initializer element is not computable at load time oci8.go:84: error: (near initialization for__cgodebug_data[9]')
oci8.go:85: warning: initialization makes integer from pointer without a cast
oci8.go:85: error: initializer element is not computable at load time
oci8.go:85: error: (near initialization for __cgodebug_data[10]') oci8.go:86: warning: initialization makes integer from pointer without a cast oci8.go:86: error: initializer element is not computable at load time oci8.go:86: error: (near initialization for__cgodebug_data[11]')
oci8.go:87: warning: initialization makes integer from pointer without a cast
oci8.go:87: error: initializer element is not computable at load time
oci8.go:87: error: (near initialization for __cgodebug_data[12]') oci8.go:88: warning: initialization makes integer from pointer without a cast oci8.go:88: error: initializer element is not computable at load time oci8.go:88: error: (near initialization for__cgodebug_data[13]')
oci8.go:90: warning: initialization makes integer from pointer without a cast
oci8.go:90: error: initializer element is not computable at load time
oci8.go:90: error: (near initialization for __cgodebug_data[15]') oci8.go:92: warning: initialization makes integer from pointer without a cast oci8.go:92: error: initializer element is not computable at load time oci8.go:92: error: (near initialization for__cgodebug_data[17]')
oci8.go:93: warning: initialization makes integer from pointer without a cast
oci8.go:93: error: initializer element is not computable at load time
oci8.go:93: error: (near initialization for __cgodebug_data[18]') oci8.go:94: warning: initialization makes integer from pointer without a cast oci8.go:94: error: initializer element is not computable at load time oci8.go:94: error: (near initialization for__cgodebug_data[19]')
oci8.go:95: error: syntax error before ',' token

DSN no longer works with TNS lookup

Hello,

Since commit 716a880 TNS lookup is no longer working. Before I could connect using user/pwd@tns_name, but now it only works if I use user/pwd@machine:port/sid. I am submitting a pull request to fix it.

Prepared statement only succeeds on the first query

I am trying to use prepared statements with the go-oci8 driver. The first query succeeds but subsequent queries fail. Here is my test code:

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/mattn/go-oci8"
)

const (
    Username    = "username"
    Password    = "password"
    Hostname    = "localhost"
    Port        = "1521"
    ServiceName = "service"

    Query = "select foo, bar from baz where qux =:qux"
)

func main() {
    db, err := sql.Open("oci8",
        Username+":"+Password+"@"+Hostname+":"+Port+"/"+ServiceName)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
    stmt, err := db.Prepare(Query)
    if err != nil {
        log.Fatal(err)
    }
    defer stmt.Close()

    var foo, bar string
    qux := "12345"
    err = stmt.QueryRow(qux).Scan(&foo, &bar)
    if err != nil {
        if err == sql.ErrNoRows {
            fmt.Println("no results for qux:", qux)
        } else {
            log.Fatal(err)
        }
    }
    fmt.Printf("foo: %s, bar: %s\n", foo, bar)

    err = stmt.QueryRow(qux).Scan(&foo, &bar)
    if err != nil {
        if err == sql.ErrNoRows {
            fmt.Println("no results for qux:", qux)
        } else {
            log.Fatal(err)
        }
    }
    fmt.Printf("foo: %s, bar: %s\n", foo, bar)
}

Here is my output:

foo: 1234, bar: 5678
2015/02/27 17:59:57 exit status 1

The first line is expected; I would expected that information to be printed twice, but the second query returns an error (and log.Fatal(err) gets called).

Are prepared statement expected to work? Am I using doing something incorrectly?

how to use boolean value in oracle?

i found that the boolean value in go-oci8.go just use SQLT_INT 0/1, and i create table just like this:
CREATE TABLE BUSADMIN.EVENT (
ID NUMBER(9,0) NOT NULL,
EVENT_TYPE NUMBER(18,0) NOT NULL,
CLEARED_TYPE VARCHAR2(255) NOT NULL,
EVENT_ID NUMBER(18,0) NOT NULL,
EVENT_NAME VARCHAR2(255) NOT NULL,
PERCEIVED_SEVERITY VARCHAR2(255) NOT NULL,
DETAILED_INFORMATION VARCHAR2(255) NOT NULL,
PROPOSED_REPAIR_ACTIONS VARCHAR2(255) NOT NULL,
CREATEDAT VARCHAR2(255) NOT NULL,
UPDATEDAT VARCHAR2(255) NOT NULL,
B_IS_SYSTEM_DEFINE NUMBER(1,0) NOT NULL,
PRIMARY KEY(ID)
NOT DEFERRABLE
VALIDATE
)
the B_IS_SYSTEM_DEFINE is a boolean value, but when i insert or delete value from the table, the process always dump, anyone can help me?

Internal Oracle error when inserting on Windows 32 bits

I'm getting internal errors on Windows 64 when using Go 32 bits. The problem happens when I perform some insert. It does insert one line on the database but then it returns an error. I get the following error:

ORA-21500: internal error code, arguments: [17112], [0x120E7F6C], [], [], [], [], [], []

From what I could analyze the problem was caused by commit ab923f3 but I don't know how to solve it.

Below is the code and the call stack returned by Go:

    db, err := sql.Open("oci8", "user/[email protected]:1521/orcl")
    if err != nil {
        fmt.Println(err)
    }

    _, err = db.Exec("insert into test values (:pk, :id)", 8, 7)
    if err != nil {
        fmt.Println(err)
    }
----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------
_skgudmp()+100       CALLrel  _kgdsdst()           18E8AC 3301959C 3301959C
                                                   18EF38 5F7F78E9 18EED0
_kgeriv_int()+139    CALLreg  00000000             0 0
_kgeriv()+22         CALLrel  _kgeriv_int()        3301959C 0 42D8 0 1 18EFA4
_kgeric1()+20        CALLrel  _kgeriv()            3301959C 0 42D8 1 18EFA4
_kgherror()+251      CALLrel  _kgeric1()           3301959C 0 42D8 2 120E7F6C 0
_kghfre()+2441       CALLrel  _kgherror()          3301959C 33020414 42D8
                                                   120E7F6C
_kpuhhfre()+894      CALLrel  _kghfre()            3301959C 33020414 18F0D8 4000
                                                   67D70434
_kpugattr()+51344    CALLrel  _kpuhhfre()          33018FF0 120E7F80 67D70434
_OCIAttrGet()+23     CALLrel  _kpugattr()          0 0 0 5F6B196C 3303355C 4
_OCIAttrGet()+46     CALLptr  00000000             3303355C 4 1213FD54 0 13
                                                   3302305C
004E7ACB             CALLrel  005C7B00             3303355C 4 1213FD54 0 13
                                                   3302305C
0042FBA3             CALLreg  00000000             1213FD38 2F8 120F8000 4
                                                   120E6420 4026A1
00000000             CALL???  00000000             
0018FF00             CALL???  00000000             928F8 928F8 0 0 18FEEC
                                                   FFFFFFFF
00000000             CALL???  00000000             

Call stack signature: 0x316536ec65003599

ORA-12560: TNS:protocol adapter error

I try to connect to my database with like:

    db, err := sql.Open("oci8", "user:password@server:port")
    if err != nil {
        fmt.Println(err)
        return
    }

but get the error
ORA-12560: TNS:protocol adapter error

Selecting from table with timestamp causes "SIGBUS: bus error"

Reproduce as follows:

import (
    "database/sql"
    "fmt"
    "os"
    "time"

    _ "github.com/mattn/go-oci8"
)


func main() {
    os.Setenv("NLS_LANG", "")

    db, err := sql.Open("oci8", "user/[email protected]:1521/service.example.com")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer db.Close()

    _, err = db.Exec("create table timestamp_test (t timestamp(6), data nvarchar2(100))")
    if err != nil {
        fmt.Println("create failed", err)
        return
    }

    _, err = db.Exec("insert into timestamp_test (t, data) values(sysdate, 'sample data')")
    if err != nil {
        fmt.Println("insert failed", err)
        return
    }

    rows, err := db.Query("select t, data from timestamp_test")
    if err != nil {
        fmt.Println(err)
        return
    }

    for rows.Next() {
        var time time.Time
        var message string
        rows.Scan(&time, &message)
        fmt.Println(time, message)
    }
    err = rows.Close()
    if err != nil {
        fmt.Println(err)
        return
    }

    return
}

Would be a good candidate for a test case.

Trim result

in line 434:

433 for i := range dest {
434     dest[i] = string(rc.cols[i].pbuf)
435 }

should we trim the result?

Example is poor

I tried to use but seem like your code exception for sql.Open is poor. In your example your write db, err := sql.Open("oci8","scott/tiger"). I belive when i read your code i see your comment mean scott/tiger can be replace by user:password@host:port/sid. I tried to replace them but seem like it all success even i wrong host or port.

Even i correct them, something like db.Exec("CONN SYSTEM/") return runtime.panic. After that i try to test ParseDSN and i realize your format is wrong. And i must continue to figure how your code work.

Hope you fix all that soon.

Does not appear to support service names as opposed to SIDs

When using a secure external password store (http://www.oracle.com/technetwork/database/security/twp-db-security-secure-ext-pwd-stor-133399.pdf), you typically reference your connection as a service.

For example if my TNS name is testdb.world, I could do:

  • sqlplus /@testdb.world
  • jdbc:oracle:thin:/@testdb.world

Debugging oci8.go, I see that at the end of ParseDSN, if I give it /@testdb.world then all of my variables in dsn are empty, except for port which is some non-numeric data (probably due to oci8.go:420's Atoi).

Is there any way to connect against a password store? Might just require an updated ParseDSN?

Improve fetch performance by fetching more rows at a time

I have been comparing go-oci8 to other drivers written in Go and other languages. I have executed a simple test where I query and fetch all the records (rows.Next()) from a single table with 32 columns, 2 million rows and an average row size of 58 bytes. The application and database are on the same Windows machine. Here are the results, from fastest to slowest:

PL/SQL - 4.8 seconds
.Net (System.Data.OracleClient) - 6 seconds
go-oci8 - 18 seconds
goracle - 33 seconds
Delphi (DOA) - 58 seconds

go-oci8 has good performance compared to goracle and Delphi, however it is around 3x slower than .Net.

I started investigating and the most obvious difference is that in go-oci8 when OCIStmtFetch is called the nrows parameter is always 1:

func (rc *OCI8Rows) Next(dest []driver.Value) error {
    rv := C.OCIStmtFetch(
        (*C.OCIStmt)(rc.s.s),
        (*C.OCIError)(rc.s.c.err),
        1, // nrows
        C.OCI_FETCH_NEXT,
        C.OCI_DEFAULT)

.Net, however, has a variable amount of rows:

rc = TracedNativeMethods.OCIStmtFetch(
                                        _statementHandle,           // stmtp
                                        ErrorHandle,                // errhp
                                        _rowsToPrefetch,            // crows
                                        OCI.FETCH.OCI_FETCH_NEXT,   // orientation
                                        OCI.MODE.OCI_DEFAULT        // mode
                                        );

From what I've seen from the code, .Net fetches around 64 kb of data each time, which in my case would mean around 1100 rows.

I'm trying to make go-oci8 fetch more rows, however when I do that errors start appearing everywhere, especially on the calls to close the cursors.

Before I dig any deeper I was wondering if you have already tried anything similar, and maybe have some idea on what would be the parts that need to be modified in order to do that.

Intermittent ORA-01480 on prepared statement execution

When using Exec on a prepared statement I randomly get:
ORA-01480: trailing null missing from STR bind value

The prepared statement is:

insertFile, err := db.Prepare("INSERT INTO walkfiles (walk_id, ftype, nlinks, bytes, path) VALUES (2, 'FILE', :nlinks, :bytes, :path)")

The exec is:
insertFile.Exec(wf.FileInfo.Sys().(_syscall.Stat_t).Nlink, wf.FileInfo.Sys().
(_syscall.Stat_t).Size, wf.Path)

The program walks a directory and stores each file's FileInfo and full path, storing them in the wf struct. Printing out the information shows no problem with the path, and it is well below the column size of 500 chars, and it happens on different paths each time.

ORA-01756 error

I get a oracle error "ORA-01756" when I insert into the table with Chinese string use the example.For example:
_, err = db.Exec("insert into foo values('你好我')")

But the following statement can be executed successful:
_, err = db.Exec("insert into foo values('你好你好你好你好你好你好你好你好你好你好你好你好')")

Like this has a same problem:
_, err = db.Exec("insert into foo values('你好你好你好你好你好你好你好你好你好你好你好中')")

That will be generated a "ORA-01756" if it has more than two Chinese strings in this statement.And some Chinese strings is no problem when I append them after the variable in this statement.
Another question: I can not get the Chinese unicode to query from database after insert into the table.The column results like "浣犲ソ浣犲ソ浣犲ソ浣犲ソ浣犲ソ".

Error when begin transaction

When begin a transaction db.Begin(), always return error, caused by oci8.go, line:39.

Error says:

ORA-06550: line 3, column 0:\nPLS-00103: Encountered the symbol \"end-of-file\" when expecting one of the following:\n\n   ( begin case declare exit for goto if loop mod null pragma\n   raise return select

exec pl/sql block

Hi
How to execute and read output from pl/sql block?

r, _ := db.Exec("begin dbms_output.put_line('sdsdsdd'); end;")

concurrent connects crash + solution

I have used a previous version of the driver to connect to two remote databases over slow connection, therefore setting up the connection was done in parallel. This crashed now and then with SEGV's as the malloc() in the client library are not necessarily thread safe.

The solution is to use different calls to setup the initial environment,
and to set the OCI_THREADED option:

Here is the diff:

@@ -70,22 +72,19 @@ func (d *OCI8Driver) Open(dsn string) (driver.Conn, error) {
        token := strings.SplitN(dsn, "@", 2)
        userpass := strings.SplitN(token[0], "/", 2)

-       rv := C.OCIInitialize(
-               C.OCI_DEFAULT,
+       rv := C.OCIEnvCreate(
+               (**C.OCIEnv)(unsafe.Pointer(&conn.env)),
+               C.OCI_THREADED,
+               nil,
                nil,
                nil,
                nil,
+               0,
                nil)
        if rv == C.OCI_ERROR {
                return nil, ociGetError(conn.err)
        }

-       rv = C.OCIEnvInit(
-               (**C.OCIEnv)(unsafe.Pointer(&conn.env)),
-               C.OCI_DEFAULT,
-               0,
-               nil)
-
        rv = C.OCIHandleAlloc(
                conn.env,
                &conn.err,

Commits since nov 11, does not work in Windows 7 with 32 bits

Hello, your last package compiles well, generates the .a file and my program that imports your packate compiles well also, but when executing, it hangs and produces the increment of CPU and I/O.
The connection to Database seems working well:
db, err := sql.Open("oci8", connection)
But it hangs when invoking to:
err = db.Ping()
I recovered one of the commits previous to november 11 and all is working as usual (very well), so it seems that the changes made to your code in nov 11 are the origin of the described problem.
Best regards.

Travis-CI Testing

I've managed to cobble together a working test environment on travis-ci for go-oci8. It appears that you typically add travis-ci to your go projects; I imagine that the reason it is not included in this one is because it is very irritating to do. I hope it helps. If you are interested I can submit a pull request.

You should be able to see the changes at my fork at https://github.com/jonlawlor/go-oci8 & an example build at https://travis-ci.org/jonlawlor/go-oci8/builds/63115619

It seems to fail on TestFooRowid currently, but all other tests pass. There were some inconsistent results when using go 1.3 as well. It takes a long time to run, because every build has to download Oracle XE and the instant client.

Array Fetches for performance

OCIFetch can be used in array mode. This reduces the overhead
considerably especially when the connection to the database is slow.
(There is a tendency to overdue this, but typically when using an arraysize
of 100 or so you have reduced the overhead to 1% of what it was, and
there is not much left to be gained). The fastest size is 1 more than the
expected number of rows, otherwise you will need an extra round trip
to reach end of fetch.

As I had no idea how to interface the array size I simply added a
variable with a default size.

If there is a better way to transfer my diffs let me know.

This adds the variable:

@@ -18,6 +18,8 @@ import (
        "unsafe"
 )

+var arraySize = 128
+
 func init() {
        sql.Register("oci8", &OCI8Driver{})
 }

This allocates the arrays:

@@ -312,7 +311,7 @@ func (s *OCI8Stmt) Query(args []driver.Value) (driver.Rows, error) {
                oci8cols[i].name = string((*[1 << 30]byte)(unsafe.Pointer(np))[0:int(ns)])
                oci8cols[i].kind = int(tp)
                oci8cols[i].size = int(lp)
-               oci8cols[i].pbuf = make([]byte, int(lp)+1)
+               oci8cols[i].pbuf = make([]byte, arraySize*(int(lp)+1))

                var defp *C.OCIDefine
                rv = C.OCIDefineByPos(

Initializing the extra fields:

@@ -331,7 +330,7 @@ func (s *OCI8Stmt) Query(args []driver.Value) (driver.Rows, error) {
                        return nil, ociGetError(s.c.err)
                }
        }
-       return &OCI8Rows{s, oci8cols, false}, nil
+       return &OCI8Rows{s, oci8cols, false, 0, 0}, nil
 }

Extra fields to hold the number of rows in the array and the
current position:

@@ -398,7 +397,10 @@ type oci8col struct {
 type OCI8Rows struct {
        s    *OCI8Stmt
        cols []oci8col
-       e    bool
+       eof  bool
+
+       nr int
+       cr int
 }

 func (rc *OCI8Rows) Close() error {

Next now works from the array, and fetch fetches an array:

@@ -414,26 +416,52 @@ func (rc *OCI8Rows) Columns() []string {
 }

 func (rc *OCI8Rows) Next(dest []driver.Value) error {
-       rv := C.OCIStmtFetch(
-               (*C.OCIStmt)(rc.s.s),
-               (*C.OCIError)(rc.s.c.err),
-               1,
-               C.OCI_FETCH_NEXT,
-               C.OCI_DEFAULT)
-       if rv == C.OCI_ERROR {
-               err := ociGetError(rc.s.c.err)
-               if err.Error()[:9] != "ORA-01405" {
-                       return err
+
+       if rc.cr >= rc.nr {
+               if rc.eof {
+                       return io.EOF
                }
-       }

-       if rv == C.OCI_NO_DATA {
-               return io.EOF
+               rv := C.OCIStmtFetch(
+                       (*C.OCIStmt)(rc.s.s),
+                       (*C.OCIError)(rc.s.c.err),
+                       C.ub4(arraySize),
+                       C.OCI_FETCH_NEXT,
+                       C.OCI_DEFAULT)
+               if rv == C.OCI_ERROR {
+                       err := ociGetError(rc.s.c.err)
+                       if err.Error()[:9] != "ORA-01405" {
+                               return err
+                       }
+               }
+
+               // how many did we fetch?
+               var num C.int
+               C.OCIAttrGet(
+                       rc.s.s,
+                       C.OCI_HTYPE_STMT,
+                       unsafe.Pointer(&num),
+                       nil,
+                       C.OCI_ATTR_ROWS_FETCHED,
+                       (*C.OCIError)(rc.s.c.err))
+               rc.nr = int(num)
+               rc.cr = 0
+
+               if rv == C.OCI_NO_DATA {
+                       rc.eof = true
+                       if rc.nr == 0 {
+                               return io.EOF
+                       }
+               }
       }

        for i := range dest {
-               dest[i] = strings.TrimSpace(string(rc.cols[i].pbuf))
+               c := rc.cols[i]
+               elSz := c.size + 1
+               offs := rc.cr * elSz
+               dest[i] = strings.TrimSpace(string(c.pbuf[offs : offs+elSz]))
        }
+       rc.cr++

        return nil
 }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.