R Shiny SQL反应查询(selectInput不显示)

时间:2016-02-15 12:23:31

标签: sql r shiny

我想构建一个闪亮的应用程序,它允许用户从数据库中选择表名,以及它们的进一步绘图等。我坚持从数据库中检索表名。我无法使用tableList创建的dbListTables(con,schema="K")作为selectInput窗口小部件的选项。我没有收到任何错误或警告,小部件根本就没有出现。

我的代码:

library(ROracle)
library(shiny)


server <- shinyServer(
  function(input, output, session) {

    con <- dbConnect(dbDriver("Oracle"),"xxx/K",username="user",password="pwd")
    tableList <- dbListTables(con,schema="K")
    output$out <- renderPrint(tableList) 

    df <- data.frame()
    quer <- paste("select * from K.", input$tabnames)
    df <- data.frame(dbGetQuery(con, quer))
    output$table <- renderTable({df})
    session$onSessionEnded(function() { dbDisconnect(con) })
  })

ui_panel <- 
  tabPanel("Test",
           sidebarLayout(
             sidebarPanel( 
             ),
             mainPanel(
               selectInput("tabnames","tabnames", choices=as.list(tableList)),
               tableOutput("out"),
               tableOutput("table")
             )
           )
  )


ui <- shinyUI(navbarPage("Test",ui_panel))

runApp(list(ui=ui,server=server))

感谢任何tipps

[已解决] selectizeInput i的部分通过将其置于服务器端解决:

library(ROracle)
library(shiny)
library(DT)


server <- shinyServer(
  function(input, output, session) {

    con <- dbConnect(dbDriver("Oracle"),"xx/K",username="user",password="pwd")
    tableList <- dbListTables(con,schema="K")

    updateSelectizeInput(session, "tabnames", server = TRUE, choices = tableList)

    sqlOutput <- reactive({
      sqlInput <- paste("select * from K.",input$tabnames)
      dbGetQuery(con, sqlInput)
    })

    output$table <- DT::renderDataTable(sqlOutput(), server=TRUE, rownames=FALSE, filter="top", options=list(pageLength=10))

    session$onSessionEnded(function() { dbDisconnect(con) })
  })

ui_panel <- 
  tabPanel("Test",
           sidebarLayout(
             sidebarPanel( 
             ),
             mainPanel(
               selectizeInput("tabnames",label = "server side", choices = NULL),
               tableOutput("out"),
               tableOutput("table")
             )
           )
  )


ui <- shinyUI(navbarPage("Test",ui_panel))

runApp(list(ui=ui,server=server))

我另外做了反应式SQL查询。 我从selectizeInput选择要显示的表格, [未解决] 然而它显示错误:

Error in .oci.GetQuery(conn, statement, data = data, prefetch = prefetch,  : 
  ORA-00903: invalid table name

我的SQL查询比smthg错了(感谢tipps!) 如果我从dbListTables中选择表名,它怎么可能呢? 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我已经解决了第二个问题!问题在ui一边非常小,而不是dataTableOutput,我有tableOutput,所以ui应该是这样的:

ui_panel <- 
  tabPanel("Test",
           sidebarLayout(
             sidebarPanel( 
             ),
             mainPanel(
               selectizeInput("tabnames",label = "server side", choices = NULL),
               tableOutput("out"),
               dataTableOutput("table")
             )
           )
  )

感谢您的帮助!