다음은 RODBC를 사용하여 알고있는 옵션입니다. 나는 이 기본적으로 RSQLite가 매개 변수 바인딩을 기본적으로 지원한다는 것을 알고 있지만 대부분은 대부분 옵션이 아닙니다.
# Note that sprintf doesn't quote character values. The quotes need
# to be already in the sql, or you have to add them yourself to the
# parameter using paste().
q <- "select * from table where val1 = '%s' and val2 < %d and val3 >= %f"
sprintf(q,"Hey!",10,3.141)
# The gsub route means you can't easily use a single placeholder
# value.
q <- "select * from table where val1 = '?' and val2 < ? and val3 >= ?"
gsub("?","Value!",q,fixed = TRUE)
나는 다양한 매개 변수를 필요로 내 작품에 대한 통조림 쿼리를 많이 다룬다. 필자의 경우에는 SELECT
권한 만 있고, 나는 사람 만이 내 코드를 실행하므로 검증에 대해 걱정할 필요가 없다.
모든 내 쿼리를 별도의 .sql 파일로 저장할 수 있도록 기본적으로 gsub
경로가 있습니다. 이것은 쿼리가 종종 내 .R 파일에 보관하는 것이 다루기 힘들 정도로 길어질 때까지 만큼 길기 때문입니다. 이들을 별도로 유지하면 이 더 적절한 SQL이되도록 서식을 지정하고 유지 관리하는 것이 더 쉬워집니다.
그래서 저는 .sql 파일 에서 쿼리를 읽고 모든 매개 변수를 바인딩하는 몇 가지 작은 함수를 작성했습니다. 콜론으로 표시된 매개 변수가 인 쿼리를 작성합니다 (예 : :param1:
, :param2:
). gsub_all
은 기본적으로 매개 변수를 통해 루프 args
위한 단지 래퍼입니다
function (path, args = NULL)
{
stopifnot(file.exists(path))
if (length(args) > 0) {
stopifnot(all(names(args) != ""))
sql <- readChar(path, nchar = file.info(path)$size)
p <- paste0(":", names(args), ":")
sql <- gsub_all(pattern = p, replacement = args, x = sql)
return(sql)
} else {
sql <- readChar(path, nchar = file.info(path)$size)
return(sql)
}
}
매개 변수 값의 명명 된 목록입니다
는 다음 나는 .SQL 파일을 읽기 위해이 기능을 사용합니다.
내가 알고있는 옵션 범위입니다.
. 'sprintf'는 제가 아는'붙여 넣기'옵션뿐입니다.하지만 위생 화도하지 않습니다. – joran
"placeholder"로 [here] (http://stackoverflow.com/a/1645086/142019) 언급 된 것 같지만 여전히 그들을 사용하는 방법을 찾을 수 없습니다. –
붙여 넣기 전에 문자열을 청소해도 똑같은 일을하지 못합니까? –