sijms / go-ora

Pure go oracle client
MIT License
795 stars 176 forks source link

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

Closed stle04 closed 5 months ago

stle04 commented 5 months ago

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