【问题标题】:Bound parameters in ROracle SELECT statementsROracle SELECT 语句中的绑定参数
【发布时间】:2012-04-11 01:28:07
【问题描述】:

R中使用ROracle时,我想给数据绑定一些参数,所以我这样做:

> dbh <- dbConnect('Oracle', 'user/pass@host.com:port/sid')
> st <- dbPrepareStatement(dbh, statement="SELECT x FROM mytab WHERE id=:1",
                           bind="character")
> st <- dbExecStatement(st, data.frame(id=c("9ae", "1f3"), stringsAsFactors=F))
> fetch(st)
    x
0 FOO

出乎意料的是它只使用数据框的 first 行来执行SELECT(如果它同时使用两行,在这种情况下我会得到 2 个输出行,而不是1),与ROracle文档相反:

dbPrepareStatement 的对象 然后将产品与 a 一起使用 data.frame(应该同意 绑定规范)在调用中 dbExecStatement 被执行 data.frame 的每一行。

是我做错了吗,还是上面的措辞可能只适用于INSERT/UPDATE 语句?

【问题讨论】:

    标签: oracle r


    【解决方案1】:

    我认为你误会了。

    本质上,您的 SQL 有一个绑定变量,但您正试图绑定两个值。第二个值被丢弃。也许您可以在 SQL 中使用 IN 运算符来做类似的事情。

    【讨论】:

    • 我的意思是用第一个值做一个选择,然后用第二个值做另一个选择。运行具有多个(可能是数千个)绑定值的语句是一个常见的用例。
    • 我理解您的意图,但认为您表达不正确。抱歉,我没有注意到您在数据框中指定了标签 id。是的,您的数据框有两行,根据文档,它应该为每一行执行。可能是因为您没有在数据框中指定row.names 值而出现问题?不过,不确定您是否会在如此旧版本的 ROracle 软件包上解决此问题。
    • 我同意 - 但自从我问这个问题以来已经 1.5 年了,而且我不再在有 Oracle 数据库的公司工作,所以此时这主要是一个学术问题。 =)
    猜你喜欢
    • 2023-01-25
    • 2018-09-30
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多