I have a service that runs a stack. For this, it performs the reading of this stack through a query in Oracle. It turns out that after hours of execution I get the message:
ORA-01000: maximum open cursors exceeded
I wonder what may be going on. I have a global variable that opens the connection and I always check its connection and copy it to the local variable.
In Rows.Next () from what I read, when he checks that there are no more lines he closes the cursor, so I couldn’t have accumulated so many cursors to exceed the limit.
Connection to the bank:
type GERENCIACON struct {
DataBase *sql.DB
}
func (gc *GERENCIACON) F_FECHAR_CONEXAO() {
gc.DataBase.Close()
}
func (gc *GERENCIACON) F_ABRIR_CONEXAO() {
if gc.DataBase == nil || gc.DataBase.Ping() != nil {
gc.DataBase, _ = sql.Open("goracle", "X/X@10.0.254.10:1521/orcl")
}
}
var VGGerenciaConexao GERENCIACON
Struct for consultation:
type GERENCIACONSULTA struct {
DataBase *sql.DB
Rows *sql.Rows
}
func (gc *GERENCIACONSULTA) F_EXECUTA_CONSULTA(pSql string) {
VGGerenciaConexao.F_ABRIR_CONEXAO()
gc.DataBase = VGGerenciaConexao.DataBase
gc.Rows, _ = gc.DataBase.Query(pSql)
}
Service fetching the stack:
var vGerenciaConsulta CertanoLabsPackage.GERENCIACONSULTA
var vSQL string
for {
vSQL = "select * from stack "
vGerenciaConsulta.F_EXECUTA_CONSULTA(vSQL)
for vGerenciaConsulta.Rows.Next() {
...
}
time.Sleep(time.Minute)
}
What could be happening?