2010-09-01 124 views
3

當使用RROracle,我想結合一些參數數據,所以我這樣做:綁定參數

> dbh <- dbConnect('Oracle', 'user/[email protected]: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 

什麼意想不到的是,它僅使用第一行數據幀做SELECT(如果使用兩行,我會得到2個輸出行在這種情況下,不是1),這違背了ROracle文檔:

的對象dbPrepareStatement 產生接着與一起使用的 data.frame在呼叫(其應與 綁定規範同意)至 dbExecStatement爲 的data.frame的各行來執行。

我這樣做是錯誤的,還是上面的措辭也許只適用於INSERT/UPDATE陳述?

回答

0

我想你是誤會。

本質上,您的SQL有一個綁定變量,但您試圖綁定兩個值。第二個值被扔掉。也許你可以在SQL中使用IN運算符來做類似的事情。

+0

我在說的是做一個選擇與第一個值,然後另一個選擇與第二個值。使用多個(可能爲數千)綁定值運行一個語句是一種常見用例。 – 2012-04-11 03:52:38

+0

我明白你的意圖,但認爲你表達不正確。對不起,我沒有注意到你在數據框中指定了標籤'id'。是的,你的數據框有兩行,根據文檔,它應該爲每一行執行。也許有一個問題,因爲你沒有在數據框中指定'row.names'值?不過,不確定你會如何修復這個舊版本的ROracle軟件包。 – 2012-04-11 14:19:00

+0

我同意 - 但我已經問了這個問題已經有1。5年了,而且我已經不在Oracle公司,所以在這一點上它主要是一個學術問題。 =) – 2012-04-12 02:13:48