1 Star 0 Fork 0

wlhet / orago

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ref_cursor.go 2.63 KB
一键复制 编辑 原始数据 按行查看 历史
wlhet 提交于 2023-02-10 15:17 . 对应 go-ora v2.5.27
package orago
import "gitee.com/wlhet/orago/network"
type RefCursor struct {
defaultStmt
len uint8
MaxRowSize int
parent *defaultStmt
}
func (cursor *RefCursor) load() error {
// initialize ref cursor object
cursor.text = ""
cursor._hasLONG = false
cursor._hasBLOB = false
cursor._hasReturnClause = false
cursor.disableCompression = true
cursor.arrayBindCount = 1
cursor.scnForSnapshot = make([]int, 2)
cursor.stmtType = SELECT
session := cursor.connection.session
var err error
cursor.len, err = session.GetByte()
if err != nil {
return err
}
cursor.MaxRowSize, err = session.GetInt(4, true, true)
if err != nil {
return err
}
columnCount, err := session.GetInt(4, true, true)
if err != nil {
return err
}
if columnCount > 0 {
cursor.columns = make([]ParameterInfo, columnCount)
_, err = session.GetByte()
if err != nil {
return err
}
for x := 0; x < len(cursor.columns); x++ {
err = cursor.columns[x].load(cursor.connection)
if err != nil {
return err
}
}
}
_, err = session.GetDlc()
if err != nil {
return err
}
if session.TTCVersion >= 3 {
_, err = session.GetInt(4, true, true)
if err != nil {
return err
}
_, err = session.GetInt(4, true, true)
if err != nil {
return err
}
}
if session.TTCVersion >= 4 {
_, err = session.GetInt(4, true, true)
if err != nil {
return err
}
_, err = session.GetInt(4, true, true)
if err != nil {
return err
}
}
if session.TTCVersion >= 5 {
_, err = session.GetDlc()
if err != nil {
return err
}
}
cursor.cursorID, err = session.GetInt(4, true, true)
if err != nil {
return err
}
_, err = session.GetInt(2, true, true)
if err != nil {
return err
}
return nil
}
func (cursor *RefCursor) getExeOptions() int {
return 0x8040
}
func (cursor *RefCursor) Query() (*DataSet, error) {
if cursor.connection.State != Opened {
return nil, &network.OracleError{ErrCode: 6413, ErrMsg: "ORA-06413: Connection not open"}
}
cursor.connection.connOption.Tracer.Printf("Query RefCursor: %d", cursor.cursorID)
cursor._noOfRowsToFetch = cursor.connection.connOption.PrefetchRows
cursor._hasMoreRows = true
if len(cursor.parent.scnForSnapshot) > 0 {
copy(cursor.scnForSnapshot, cursor.parent.scnForSnapshot)
}
session := cursor.connection.session
session.ResetBuffer()
err := cursor.write()
if err != nil {
return nil, err
}
dataSet := new(DataSet)
err = cursor.read(dataSet)
if err != nil {
return nil, err
}
return dataSet, nil
}
func (cursor *RefCursor) write() error {
err := cursor.basicWrite(cursor.getExeOptions(), false, false)
if err != nil {
return err
}
return cursor.connection.session.Write()
}
1
https://gitee.com/wlhet/orago.git
git@gitee.com:wlhet/orago.git
wlhet
orago
orago
v1.0.0

搜索帮助

53164aa7 5694891 3bd8fe86 5694891