oci8 package - github.com/mattn/go-oci8 - Go Packages (original) (raw)
// Example shows how write and read a blob
// For testing, check if database tests are disabled if oci8.TestDisableDatabase || oci8.TestDisableDestructive { fmt.Println("done") return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
// create table tableName := "E_BLOB_" + oci8.TestTimeString query := "create table " + tableName + " ( A BLOB )" ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// insert row query = "insert into " + tableName + " ( A ) values (:1)" ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query, bytes.Repeat([]byte("abcdefghijklmnopqrstuvwxyz"), 200)) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
var rows sql.Rows ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, "select A from "+tableName) if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
var theBytes []byte err = rows.Scan(&theBytes) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if len(theBytes) != 5200 { fmt.Println("len theBytes != 5200") return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
// drop table query = "drop table " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
fmt.Println("done")
Output:
done
// Example shows how write and read a clob
// For testing, check if database tests are disabled if oci8.TestDisableDatabase || oci8.TestDisableDestructive { fmt.Println("done") return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
// create table tableName := "E_CLOB_" + oci8.TestTimeString query := "create table " + tableName + " ( A CLOB )" ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// insert row query = "insert into " + tableName + " ( A ) values (:1)" ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query, strings.Repeat("abcdefghijklmnopqrstuvwxyz", 200)) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
var rows sql.Rows ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, "select A from "+tableName) if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
var aString string err = rows.Scan(&aString) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if len(aString) != 5200 { fmt.Println("len aString != 5200") return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
// drop table query = "drop table " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
fmt.Println("done")
Output:
done
// Example shows how to do a cursor select
// For testing, check if database tests are disabled if oci8.TestDisableDatabase { fmt.Println(3) return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) err = db.PingContext(ctx) cancel() if err != nil { fmt.Println("PingContext error is not nil:", err) return }
var rows sql.Rows ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, "select 1, cursor(select 2 from dual union select 3 from dual) from dual") if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
var aInt int64 var subRows *sql.Rows err = rows.Scan(&aInt, &subRows) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if aInt != 1 { fmt.Println("aInt != 1") return } if subRows == nil { fmt.Println("subRows is nil") return }
if !subRows.Next() { fmt.Println("no Next subRows") return }
err = subRows.Scan(&aInt) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if aInt != 2 { fmt.Println("aInt != 2") return }
if !subRows.Next() { fmt.Println("no Next subRows") return }
err = subRows.Scan(&aInt) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if aInt != 3 { fmt.Println("aInt != 3") return }
if subRows.Next() { fmt.Println("has Next rows") return }
err = subRows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
fmt.Println(aInt)
Output:
3
// Example shows how to do a cursor select from function
// For testing, check if database tests are disabled if oci8.TestDisableDatabase || oci8.TestDisableDestructive { fmt.Println(3) return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) err = db.PingContext(ctx) cancel() if err != nil { fmt.Println("PingContext error is not nil:", err) return }
// create function
functionName := "E_F_CURSOR_" + oci8.TestTimeString
query := create or replace function + functionName + return SYS_REFCURSOR is l_cursor SYS_REFCURSOR; begin open l_cursor for select 2 from dual union select 3 from dual; return l_cursor; end + functionName + ;
ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second)
_, err = db.ExecContext(ctx, query)
cancel()
if err != nil {
fmt.Println("ExecContext error is not nil:", err)
return
}
var rows sql.Rows ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, "select 1, "+functionName+"() from dual") if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
var aInt int64 var subRows *sql.Rows err = rows.Scan(&aInt, &subRows) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if aInt != 1 { fmt.Println("aInt != 1") return } if subRows == nil { fmt.Println("subRows is nil") return }
if !subRows.Next() { fmt.Println("no Next subRows") return }
err = subRows.Scan(&aInt) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if aInt != 2 { fmt.Println("aInt != 2") return }
if !subRows.Next() { fmt.Println("no Next subRows") return }
err = subRows.Scan(&aInt) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if aInt != 3 { fmt.Println("aInt != 3") return }
if subRows.Next() { fmt.Println("has Next rows") return }
err = subRows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
// drop function query = "drop function " + functionName ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
fmt.Println(aInt)
Output:
3
// Example shows how to do a function call with binds
// For testing, check if database tests are disabled if oci8.TestDisableDatabase { fmt.Println(3) return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
number := int64(2)
query := declare function ADD_ONE(p_number INTEGER) return INTEGER as begin return p_number + 1; end ADD_ONE; begin :num1 := ADD_ONE(:num1); end;
ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query, sql.Out{Dest: &number, In: true}) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
if number != 3 { fmt.Println("number != 3") return }
fmt.Println(number)
Output:
3
// Example shows how to do a single insert
// For testing, check if database tests are disabled if oci8.TestDisableDatabase || oci8.TestDisableDestructive { fmt.Println(1) return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
// create table tableName := "E_INSERT_" + oci8.TestTimeString query := "create table " + tableName + " ( A INTEGER )" ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// insert row var result sql.Result query = "insert into " + tableName + " ( A ) values (:1)" ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) result, err = db.ExecContext(ctx, query, 1) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// can see number of RowsAffected if wanted var rowsAffected int64 rowsAffected, err = result.RowsAffected() if err != nil { fmt.Println("RowsAffected error is not nil:", err) return }
// drop table query = "drop table " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
fmt.Println(rowsAffected)
Output:
1
// Example shows how to do a many inserts
// For testing, check if database tests are disabled if oci8.TestDisableDatabase || oci8.TestDisableDestructive { fmt.Println(3) return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
// create table tableName := "E_MANY_INSERT_" + oci8.TestTimeString query := "create table " + tableName + " ( A INTEGER )" ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// prepare insert query statement var stmt sql.Stmt query = "insert into " + tableName + " ( A ) values (:1)" ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) stmt, err = db.PrepareContext(ctx, query) cancel() if err != nil { fmt.Println("PrepareContext error is not nil:", err) return }
// insert 3 rows for i := 0; i < 3; i++ { ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = stmt.ExecContext(ctx, i) cancel() if err != nil { stmt.Close() fmt.Println("ExecContext error is not nil:", err) return } }
// close insert query statement err = stmt.Close() if err != nil { fmt.Println("Close error is not nil:", err) return }
// select count/number of rows var rows sql.Rows query = "select count(1) from " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, query) if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
var count int64 err = rows.Scan(&count) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if count != 3 { fmt.Println("count not equal to 3") return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
// drop table query = "drop table " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
fmt.Println(count)
Output:
3
// Example shows a few ways to get rowid
// For testing, check if database tests are disabled if oci8.TestDisableDatabase || oci8.TestDisableDestructive { fmt.Println("done") return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
// create table tableName := "E_ROWID_" + oci8.TestTimeString query := "create table " + tableName + " ( A INTEGER )" ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// insert row and get rowid from returning var rowid1 string // rowid will be put into here var result sql.Result query = "insert into " + tableName + " ( A ) values (:1) returning rowid into :rowid1" ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) result, err = db.ExecContext(ctx, query, 1, sql.Named("rowid1", sql.Out{Dest: &rowid1})) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
// get rowid from LastInsertId var rowid2 string // rowid will be put into here var id int64 id, err = result.LastInsertId() if err != nil { fmt.Println("LastInsertId error is not nil:", err) return } rowid2 = oci8.GetLastInsertId(id)
// select rowid var rowid3 string // rowid will be put into here var rows sql.Rows query = "select rowid from " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, query) if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
err = rows.Scan(&rowid3) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
// drop table query = "drop table " + tableName ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second) _, err = db.ExecContext(ctx, query) cancel() if err != nil { fmt.Println("ExecContext error is not nil:", err) return }
if len(rowid1) != len(rowid2) || len(rowid2) != len(rowid3) { fmt.Println("rowid len is not equal", rowid1, rowid2, rowid3) return }
fmt.Println("done")
Output:
done
// Example shows how to do a basic select
// For testing, check if database tests are disabled if oci8.TestDisableDatabase { fmt.Println(1) return }
oci8.Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
var openString string // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if len(oci8.TestUsername) > 0 { if len(oci8.TestPassword) > 0 { openString = oci8.TestUsername + "/" + oci8.TestPassword + "@" } else { openString = oci8.TestUsername + "@" } } openString += oci8.TestHostValid
// A normal simple Open to localhost would look like: // db, err := sql.Open("oci8", "127.0.0.1") // For testing, need to use additional variables db, err := sql.Open("oci8", openString) if err != nil { fmt.Printf("Open error is not nil: %v", err) return } if db == nil { fmt.Println("db is nil") return }
// defer close database defer func() { err = db.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second) err = db.PingContext(ctx) cancel() if err != nil { fmt.Println("PingContext error is not nil:", err) return }
var rows sql.Rows ctx, cancel = context.WithTimeout(context.Background(), 55time.Second) defer cancel() rows, err = db.QueryContext(ctx, "select 1 from dual") if err != nil { fmt.Println("QueryContext error is not nil:", err) return }
// defer close rows defer func() { err = rows.Close() if err != nil { fmt.Println("Close error is not nil:", err) } }()
if !rows.Next() { fmt.Println("no Next rows") return }
dest := make([]interface{}, 1) destPointer := make([]interface{}, 1) destPointer[0] = &dest[0] err = rows.Scan(destPointer...) if err != nil { fmt.Println("Scan error is not nil:", err) return }
if len(dest) != 1 { fmt.Println("len dest != 1") return } data, ok := dest[0].(float64) if !ok { fmt.Println("dest type not float64") return } if data != 1 { fmt.Println("data not equal to 1") return }
if rows.Next() { fmt.Println("has Next rows") return }
err = rows.Err() if err != nil { fmt.Println("Err error is not nil:", err) return }
fmt.Println(data)
Output:
1
- func (conn *Conn) Begin() (driver.Tx, error)
- func (conn *Conn) BeginTx(ctx context.Context, txOptions driver.TxOptions) (driver.Tx, error)
- func (conn *Conn) Close() error
- func (conn *Conn) Ping(ctx context.Context) error
- func (conn *Conn) Prepare(query string) (driver.Stmt, error)
- func (conn *Conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error)
- func (stmt *Stmt) CheckNamedValue(namedValue *driver.NamedValue) error
- func (stmt *Stmt) Close() error
- func (stmt *Stmt) Exec(values []driver.Value) (driver.Result, error)
- func (stmt *Stmt) ExecContext(ctx context.Context, namedValues []driver.NamedValue) (driver.Result, error)
- func (stmt *Stmt) NumInput() int
- func (stmt *Stmt) Query(values []driver.Value) (driver.Rows, error)
- func (stmt *Stmt) QueryContext(ctx context.Context, namedValues []driver.NamedValue) (driver.Rows, error)
This section is empty.
GetLastInsertId returns rowid from LastInsertId
NewConnector returns a new database connector
QueryEscape escapes the string so it can be safely placed inside a URL query.
QueryUnescape does the inverse transformation of QueryEscape, converting %AB into the byte 0xAB and '+' into ' ' (space). It returns an error if any % is not followed by two hexadecimal digits.
Conn is Oracle connection
Begin starts a transaction
BeginTx starts a transaction
func (conn *Conn) Close() error
Close a connection
PrepareContext prepares a query with context
Connector is the sql driver connector
Connect returns a new database connection
Driver returns the OCI8 driver
DSN is Oracle Data Source Name
ParseDSN parses a DSN used to connect to Oracle
It expects to receive a string in the form:
[username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN]
Connection timeout can be set in the Oracle files: sqlnet.ora as SQLNET.OUTBOUND_CONNECT_TIMEOUT or tnsnames.ora as CONNECT_TIMEOUT
Supported parameters are:
loc - the time location for reading timestamp (without time zone). Defaults to UTC Note that writing a timestamp (without time zone) just truncates the time zone.
isolation - the isolation level that can be set to: READONLY, SERIALIZABLE, or DEFAULT
prefetch_rows - the number of top level rows to be prefetched. Defaults to 0. A 0 means unlimited rows.
prefetch_memory - the max memory for top level rows to be prefetched. Defaults to 4096. A 0 means unlimited memory.
questionph - when true, enables question mark placeholders. Defaults to false. (uses strconv.ParseBool to check for true)
type DriverStruct struct {
Logger *[log](/log).[Logger](/log#Logger)}
DriverStruct is Oracle driver struct
Open opens a new database connection
EscapeError for invalid escape
Error returns string for invalid URL escape
Result is Oracle result
LastInsertId returns last inserted ID
RowsAffected returns rows affected
Rows is Oracle rows
func (rows *Rows) Close() error
Close closes rows
func (*Rows) ColumnTypeDatabaseTypeName ¶ added in v0.0.7
func (rows *Rows) ColumnTypeDatabaseTypeName(i int) string
ColumnTypeDatabaseTypeName implement RowsColumnTypeDatabaseTypeName.
func (*Rows) ColumnTypeLength ¶ added in v0.0.7
ColumnTypeLength is returning OCI_ATTR_DATA_SIZE, which is max data size in bytes. Note this is not returing length of the column type, like the 20 in FLOAT(20), which is what is normally expected. TODO: Should / can it be changed to return length of the column type?
func (*Rows) ColumnTypeScanType ¶ added in v0.0.7
ColumnTypeScanType implement RowsColumnTypeScanType.
func (*Rows) Columns ¶ added in v0.0.7
func (rows *Rows) Columns() []string
Columns returns column names
Stmt is Oracle statement
CheckNamedValue checks a named value
func (stmt *Stmt) Close() error
Close closes the statement
ExecContext run a exec query with context
func (stmt *Stmt) NumInput() int
NumInput returns the number of input
QueryContext runs a query with context
Tx is Oracle transaction
Commit transaction commit
func (tx *Tx) Rollback() error
Rollback transaction rollback
Values maps a string key to a list of values. It is typically used for query parameters and form values. Unlike in the http.Header map, the keys in a Values map are case-sensitive.
ParseQuery parses the URL-encoded query string and returns a map listing the values specified for each key. ParseQuery always returns a non-nil map containing all the valid query parameters found; err describes the first decoding error encountered, if any.
Add adds the value to key. It appends to any existing values associated with key.
Del deletes the values associated with key.
Encode encodes the values into “URL encoded” form ("bar=baz&foo=quux") not sorted by key
Get gets the first value associated with the given key. If there are no values associated with the key, Get returns the empty string. To access multiple values, use the map directly.
Set sets the key to value. It replaces any existing values.