go使用godror驱动执行oracle储存过程,有入参和出参,代码示例
时间: 2024-09-10 21:09:56 浏览: 39
mybatis调用Oracle存储过程(无参、有入出参)等各种情况例子的详细使用方法
5星 · 资源好评率100%
Go语言中使用Godror库连接Oracle数据库并执行存储过程时,你需要先安装`github.com/godror/godror`库。下面是一个基本的代码示例,展示了如何调用带输入参数的存储过程,并接收返回值:
```go
package main
import (
"database/sql"
"fmt"
_ "github.com/godror/godror"
)
// 假设你的存储过程名为GetUsers,接受一个用户ID作为参数,返回一个User结构体切片
type User struct {
ID int
Name string
}
func main() {
// 初始化数据库连接
db, err := sql.Open("oci", "your_connection_string") // 使用oci适配器连接Oracle
if err != nil {
fmt.Println("Error connecting to Oracle:", err)
return
}
defer db.Close()
// 准备SQL语句,包括存储过程名和参数
userID := 1
sqlStr := fmt.Sprintf("BEGIN GetUsers(:id) INTO :users; END;", "id", "users")
// 定义映射到Go类型的参数
var users []User
stmt, err := db.Prepare(sqlStr)
if err != nil {
fmt.Println("Error preparing statement:", err)
return
}
defer stmt.Close()
// 执行存储过程
err = stmt.Exec(userID, &users)
if err != nil {
fmt.Println("Error executing procedure:", err)
return
}
// 获取结果
rows, err := stmt.Query()
if err != nil {
fmt.Println("Error querying result:", err)
return
}
defer rows.Close()
for rows.Next() {
var u User
err = rows.Scan(&u.ID, &u.Name)
if err != nil {
fmt.Println("Error scanning row:", err)
} else {
fmt.Printf("User ID: %d, Name: %s\n", u.ID, u.Name)
}
}
if err := rows.Err(); err != nil {
fmt.Println("Error reading rows:", err)
}
}
```
在这个例子中,记得将`your_connection_string`替换为你的实际Oracle数据库连接字符串。
阅读全文