반응형
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
반응형
'programing' 카테고리의 다른 글
최근 게시물 워드프레스 위젯을 편집하여 3개 언어를 한 번에 표시하는 도움말 (0) | 2023.09.18 |
---|---|
성공과 .done의 방법 $.done의 차이점은 무엇입니까? (0) | 2023.09.18 |
Android XML 백분율 기호 (0) | 2023.09.18 |
Angular ui-router로 기본 상태를 설정하는 방법 (0) | 2023.09.18 |
ReferenceError: 설명이 NodeJs로 정의되지 않았습니다. (0) | 2023.09.13 |