Подстановка переменной SQL-запроса Golang - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть SQL-запрос, который нуждается в подстановке переменных для лучшего использования моего go-kit сервиса.

У меня есть dep & org в качестве пользовательских входов, которые являются частью моей службы отдыха, например: 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

Работают только жестко запрограммированные значения, а подстановка не удалась.

Я не нашел особой помощи в блогах оракулов по этому поводу и хотел бы знать, есть ли способ приблизиться к этому.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Как сказано в @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)

}
0 голосов
/ 15 сентября 2018

Синтаксис заполнителя параметра (ссылка: http://go -database-sql.org / prepare.html )

Синтаксис для параметров заполнителя в подготовленных выражениях зависит от базы данных,Например, сравнивая MySQL, PostgreSQL и Oracle:

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

Для оракула вам необходимо использовать: dep,: org в качестве заполнителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...