programing

Golang SQL 쿼리 변수 치환

goodsources 2023. 9. 18. 21:18
반응형

Golang SQL 쿼리 변수 치환

는 고킷 서비스를 더 잘 사용하기 위해 가변적인 대체가 필요한 sql 쿼리를 가지고 있습니다.

있습니다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

하드 코딩된 값만 작동하고 대체는 실패합니다.

저는 오라클 블로그에서 이에 대한 도움을 많이 받지 못했는데, 이에 접근할 수 있는 방법이 없을까 생각하고 있습니다.

매개 변수 자리 표시자 구문(참조: http://go-database-sql.org/prepared.html )

준비된 문의 자리 표시자 매개변수에 대한 구문은 데이터베이스별입니다.예를 들어 MySQL, Postgre 비교SQL 및 Oracle:

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

오라클의 경우 :dep, :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)

}

언급URL : https://stackoverflow.com/questions/52340411/golang-sql-query-variable-substituion

반응형