2010-05-26 47 views
0

我有一個關於甲骨文綁定變量和select語句的問題。Oracle/c#:我如何使用綁定變量與選擇語句來返回多個記錄?

我想達成什麼是主鍵做一些不同的值的選擇。我想通過使用綁定值的數組傳遞這些值。

select * from tb_customers where cust_id = :1 

int[] cust_id = { 11, 23, 31, 44 , 51 };

我然後綁定一個DataReader得到的值插入表中。

的問題是,所得到的表僅包含單個記錄(cust_id=51)。因此,似乎每條語句都是獨立執行的(因爲它應該),但我希望將結果作爲一個集合(單個表)提供。

解決方法是創建一個臨時表,插入cust_id的所有值,然後針對tb_customers執行聯接。這種方法的問題是我需要每種不同類型主鍵的臨時表,因爲我希望將這個表用於許多表(有些甚至組合了主鍵)。

有什麼我失蹤?

回答

0

不問一個問題,你爲什麼會想這樣做開始。如果不是sql語句是這樣的

select * from tb_customers where cust_id = 11 or 23 or ... 

編輯:

我有限的Oracle,但是當我看到的文檔,我認爲你可能需要做這樣的事情:

variable i number 
exec :i := 11 
select * from tb_customers where cust_id = :i 

這將允許你採取的結合優勢。您將不得不將每個記錄返回添加到您自己的集合中,因爲它一次只能返回一個。

+0

是我需要將通過在選擇或得到滿足,但我將可能是成千上萬的項目推到選擇的字符串在這種情況下,和一個策略使用綁定變量可能會更有效? – twiga 2010-05-26 17:11:56

0

我知道這是前一段時間要求,但不是輝煌的答案。

我會做這樣的事情 - 請原諒粗psudo代碼

string bindList = ""; 
for(int ii=0;ii<cust_id.count;++ii) 
{ 
    if(ii == 0) 
    { 
    bindList += ":" + ii; 
    } 
    else 
    { 
    bindList += ",:" + ii; 
    } 
    OracleParameter param = new OracleParameter(); 
    param.dbType = types.int; 
    param.value = cust_id[ii]; 
    command.Parameters.Add(param); 
} 

query = "select * from tb_customers where cust_id in(" + bindList + ")"; 

所以後來查詢結束有在(1,2,3等),每一種單獨的約束。

也有類似的問題在這裏:OracleParameter and IN Clause