RJDBC:R到Oracle不能DELETE或DROP TABLE

时间:2015-08-03 20:58:38

标签: r oracle rjdbc

我正在使用 RJDBC 连接到本地数据库。这允许我使用dbGetQuery轻松地创建SELECT查询,使用dbWriteTable创建CREATE TABLE。

但是,我无法直接从我的R控制台找出DROP TABLE或DELETE或SELECT INTO的方法。当我在SQL Developer中直接执行这些操作时,这些工作正常,但是当我将查询从R传递到数据库时则不行。

如何使用R执行非SELECT语句的数据库记录操作?

2 个答案:

答案 0 :(得分:2)

我尝试使用其他类型。 dbGetQuery基于查找和迭代数据库而不是操纵它的记录。 提出了类似的问题before; 我找不到一个很好的R例子,但如果它有帮助,可以找到一个很好的java示例here:

修改

我找到了我正在谈论的类型!花了一段时间,无论如何 - sqlQuery允许你运行几乎任何查询,即 - DB记录的变化。示例I从this源修改:

res <- sqlQuery(con1,"DELETE TABLE TESTDATA", errors=FALSE) 
# res will now hold the result of the query.
# -1 means error, otherwise iteration is sucessful, and it will hold the number of rows affected.
if (res == -1){ #if something messed up
 cat ("An error has occurred.\n")
 msg <- odbcGetErrMsg(con1) #Use your connection for this.
 print (msg)
} else {
  cat ("Table was deleted successfully.\n")
}

编辑2

我把它与RODBC混淆了,但是没有理由担心,因为我也找到了RJDBC替代品!它叫做dbSendUpdate。例如:

# Assuming you have the connection saved as conn; these example shows how to use dbSendUpdate to create tables and insert values.
# You could use it with every non-selective query, that is, which manipulates the record (update,delete,insert,drop etc.)
# create table, with dbSendUpdate:
dbSendUpdate(conn, "CREATE TABLE foo(a INT,b VARCHAR(100))")
# insert value, bind parameters to placeholders in statement:
dbSendUpdate(conn, "INSERT INTO foo VALUES(?,?)", 42, "bar")
# feel free to modify the query itself, these are just example values.

答案 1 :(得分:0)

这类似于另一个已回答的问题here

顾名思义,基本上是dbGetQuery()用于发送查询和获取其结果。

如果要向数据库发送一般语句,例如“ drop table”等。 您可以使用:

dbSendUpdate(connection_object, "drop table table_name")