Этот ответ покрывает вашу первую попытку запроса:
observeEvent(input$go,{
output$table <- renderTable({
sql <- 'SELECT ?select FROM City;'
query <- sqlInterpolate(pool, sql, select = input$select)
dbGetQuery(pool, query)
})
})
Нет, вы не можете этого сделать, потому что подготовленные операторы в SQL могут использовать заполнители только для данных, но не для объектов базы данных (например, таблицы). и имена столбцов). Для построения запроса вам понадобится вставить:
observeEvent(input$go,{
output$table <- renderTable({
sql <- paste("SELECT", input$select, "FROM City;")
dbGetQuery(pool, sql)
})
})
Но учтите, что этот подход может быть подвержен внедрению SQL, предполагая, что input$select
будет приходить извне. Типичный обходной путь для этой проблемы состоит в том, чтобы вместо этого подготовить некоторое количество подготовленных операторов, а затем выбрать соответствующий, основываясь на входных данных извне, например:
observeEvent(input$go,{
output$table <- renderTable({
sql1 <- "SELECT name FROM City;"
sql2 <- "SELECT state FROM City;"
query <- ifelse(input$select == "name", sql1, sql2)
dbGetQuery(pool, query)
})
})