Golang SQL 查询变量替换



我有sql查询,需要变量替换才能更好地使用我的go-kit服务。

我有deporg作为用户输入,它们是我的休息服务的一部分,例如:dep = 'abc'org = 'def'

我尝试了一些方法,例如:

rows, err := db.Query(
"select name from table where department='&dep' and organisation='&org'",
)

和:

rows, err := db.Query(
"select name from table where department=? and organisation=?", dep , org,
)

这导致了错误:sql: statement expects 0 inputs; got 2

只有硬编码值有效,替换失败。

我没有从oracle博客中找到太多关于此的帮助,并且想知道是否有任何方法可以解决此问题。

参数占位符语法 (参考: http://go-database-sql.org/prepared.html (

预准备语句中占位符参数的语法为 特定于数据库。例如,比较MySQL,PostgreSQL和 神谕:

MySQL               PostgreSQL            Oracle
=====               ==========            ====== 
WHERE col = ?       WHERE col = $1        WHERE col = :col 
VALUES(?, ?, ?)     VALUES($1, $2, $3)    VALUES(:val1, :val2, :val3)

对于 oracle,您需要使用 :d ep, :org 作为占位符。

如@dakait所述,在您的准备语句中,您应该使用:占位符。

因此,为了完整起见,您可以让它使用以下内容:

package main
import (
"database/sql"
"fmt"
"log"
)
// Output is an example struct
type Output struct {
Name string
}
const (
dep = "abc"
org = "def"
)
func main() {
query := "SELECT name from table WHERE department= :1 and organisation = :2"
q, err := db.Prepare(query)
if err != nil {
log.Fatal(err)
}
defer q.Close()
var out Output
if err := q.QueryRow(dep, org).Scan(&out.Name); err != nil {
log.Fatal(err)
}
fmt.Println(out.Name)
}

最新更新