3

我正在使用RJDBC连接到本地数据库。这使我可以轻松地使用 SELECT 查询dbGetQuery,并使用 CREATE TABLE dbWriteTable

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

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

4

2 回答 2

2

我会尝试使用不同的类型。 dbGetQuery以查找和迭代数据库为基础,而不是操纵它的记录。以前也有人问过类似的问题; 我找不到一个不错的 R 示例,但如果有帮助,可以在这里找到一个不错的 java 示例:

编辑:

我找到了我所说的类型!无论如何,花了我一段时间 -sqlQuery允许您运行几乎任何查询,即 - 数据库记录的更改。我从这个来源修改的示例:

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.
于 2015-08-03T21:08:37.983 回答
0

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

顾名思义,基本上 dbGetQuery() 用于发送查询并接收其结果。

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

dbSendUpdate(connection_object, "drop table table_name")
于 2018-08-23T08:27:23.057 回答