sijms/go-ora

'ORA-03146: invalid buffer length for TTC field' on procedure call with out parameter

stle04 opened this issue · 0 comments

Hi

I faced with issue on 2.8.13 version

I have a procedure

CREATE OR REPLACE PROCEDURE PP(value OUT NUMBER)
AS BEGIN
    SELECT 1 INTO value from dual;
END;

and next code Go code

package main

import (
	"context"
	"database/sql"
	"fmt"
	_ "github.com/sijms/go-ora/v2"
)

const url = "oracle://user:pass@localhost:1521/XE"

func main() {
	ctx := context.TODO()

	db, err := sql.Open("oracle", url)
	if err != nil {
		fmt.Println("Can't open database: ", err)
		return
	}

	defer func() {
		err = db.Close()
		if err != nil {
			fmt.Println("Can't close database: ", err)
		}
	}()

	conn, err := db.Conn(ctx)
	if err != nil {
		fmt.Println("Can't open connection: ", err)
		return
	}
	defer func() {
		err = conn.Close()
		if err != nil {
			fmt.Println("Can't close connection: ", conn)
		}
	}()

	var value int
	_, err = conn.ExecContext(
		ctx,
		`CALL PP(
			value => :1
		)`,
		&sql.Out{Dest: &value},
	)
	if err != nil {
		fmt.Println("Can't exec: ", err)
		return
	}

	fmt.Println("ok")
}

And the output for that code is

Can't exec: ORA-03146: invalid buffer length for TTC field