Как проверить условие, существует ли таблица в RMysql?

Я хочу проверить условие в приложении Shiny, существует ли таблица MySQL или нет в определенной базе данных. Если таблица не существует, она должна вернуть нулевое значение. Вот мой код выглядит так.

loadData <- function(){

db <- dbConnect(MySQL(), dbname = databaseName, host = host, 
              port = port, user = user, password = password)

res <- dbSendQuery(db, "SELECT * FROM some_table")
final_data <- dbFetch(res)
dbDisconnect(db)
return(final_data)

}

Я хочу обработать исключение, выданное dbSendQuery(db, "SELECT * FROM some_table") если some_table не существует в базе данных. Пожалуйста помоги..

2 ответа

Решение

Вот что я делаю. Может быть, есть еще что-то более надежное или обобщаемое?

Просто "покажите таблицы" в качестве запроса и проверьте наличие имени вашей таблицы в результате.

loadData <- function() {
  db <- dbConnect(
    MySQL(),
    dbname = databaseName,
    host = host,
    port = port,
    user = user,
    password = password
  )

  rs <- dbSendQuery(con, "show tables")
  table.frame <- fetch(rs, n = -1)
  if ("some_table" %in% table.frame[, 1]) {

    res <- dbSendQuery(db, "SELECT * FROM some_table")
    final_data <- dbFetch(res)
    dbDisconnect(db)
    return(final_data)

  } else {
    return(NULL)
  }
}

Это возвратит нуль, если таблица не существует:

...
res <- dbSendQuery(db, "SELECT nullif(count(1),0) tableexists FROM information_schema.tables WHERE table_name='some_table'")
...

Вы также можете включить AND table_schema='ваша схема', если вас интересует, существует ли таблица или нет в одной конкретной схеме

Другие вопросы по тегам