我的firebird程序只接受几个bigint值的参数。当我从go调用这个过程时,程序参数类型为uint64,值大于max int32/2,存储为负数。如何将bigint/uint64值作为参数传递?
import (
...
"database/sql"
"github.com/arteev/firebirdsql"
)
...
type Data struct {
Value uint64
Sum uint64
Ts time.Time
}
...
tx, _ := db.Begin()
st, err := tx.Prepare("execute procedure add_summary(?, ? ,? ,?, ?)")
if err != nil {
tx.Rollback()
}
defer st.Close()
if _, err := st.Exec(ip, ifKey, port, data.Sum, data.Ts); err != nil {
...
} else {
...
}
...
架构/表ddl片段:
CREATE TABLE ADM_SUMMARY (
ITEM_ID INTEGER NOT NULL,
PERIOD CHAR(1) NOT NULL,
VAL BIGINT NOT NULL,
DT TIMESTAMP NOT NULL,
UNITS CHAR(1) NOT NULL
);
过程ddl片段:
CREATE OR ALTER PROCEDURE ADD_SUMMARY (
ip varchar(20),
if_key varchar(20),
if_num integer,
val bigint,
dt timestamp)
as...
我写了一个小测试:测试代码
tx, err := db.Begin()
if err != nil {
tx.Rollback()
}
_, err = tx.Exec("insert into test(B1) values(?)", uint64(2147483648))
if err != nil {
fmt.Println(err)
}
tx.Commit()
试验台ddl:
CREATE TABLE TEST (
B1 BIGINT
);
结果:b1=-2147483648
1条答案
按热度按时间g6baxovj1#
nakagami在2小时前添加了引用此问题的提交修复问题#112 92e5c50 nakagami在2小时前关闭了此问题
从我的错误报告几个小时后,它就被作者关闭了。github.com/arteev/firebirdsql上的bug报告仍然打开。感谢大家的参与和建议。