代码之家  ›  专栏  ›  技术社区  ›  Susarla Nikhilesh

执行grant或synonyms的函数是什么?

  •  2
  • Susarla Nikhilesh  · 技术社区  · 7 年前

    我有一个同义词声明:

    CREATE OR REPLACE SYNONYM  sample-table-name FOR master.sample-table-name
    

    有人可以建议如何在R。

    1 回复  |  直到 7 年前
        1
  •  2
  •   cole    7 年前

    我希望使用 dbExecute() 应该有效。否则, dbSendStatement()

    上的文档 dbGetQuery

    此方法仅适用于SELECT查询

    为了查看可用的功能,可以执行以下操作: ls('package:DBI') .根据文件:

    dbExecute :

    对于大多数后端),调用dbSendStatement(),然后 dbGetRowsAffected(),确保结果始终为free-d by dbClearResult()。

    dbSendStatement

    dbSendStatement()方法仅提交并同步执行 受影响的行,对返回的结果对象调用dbGetRowsAffected()。 您应该总是更喜欢dbExecute()。

    编辑: 这些方法可能适用于的其他实现 DBI RJDBC 未来无论如何,看起来他们已经实施了 dbSendStatement() dbSendQuery() ,因此它们不会用于此目的。

    框架 dbSendUpdate()

    dbSendQuery和dbSendUpdate向数据库提交SQL查询。这个 两者之间的区别只是dbSendUpdate与DBML一起使用 查询,因此不返回任何结果集。

    在另一个DBMS上使用类似查询确认:

    dbSendStatement(conn,'SET search_path=public;')
    #Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
    #Unable to retrieve JDBC result set for SET search_path=public; (No results were returned by the query.)
    
    traceback()
    #7: stop(..., " (", .jcall(x, "S", "getMessage"), ")")
    #6: .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", 
    #       statement)
    #5: .local(conn, statement, ...)
    #4: dbSendQuery(conn, statement, ...)
    #3: dbSendQuery(conn, statement, ...)                ## this is the problem
    #2: dbSendStatement(conn, "SET search_path=public;")
    #1: dbSendStatement(conn, "SET search_path=public;")
    
    dbSendUpdate(conn, 'SET search_path=public;')
    # successful
    
    dbCommit(conn)
    # persist the change past the current session (RJDBC seems to give you transaction control here)