- PR -

ODP.NETで配列を使った問合せ(VB.NETまたはC#)

1
投稿者投稿内容
託八郎
会議室デビュー日: 2004/02/23
投稿数: 2
投稿日時: 2004-02-23 16:38
お世話になります。

配列バインド機能でストアドプロシージャを複数実行する方法はOTNにも掲載されていましたが、SELECT文も同様に複数回実行できないものでしょうか?

cmd.CommandText = "select dname WHERE deptno = :1"

deptnoにバインド配列を渡して、結果(OracleDataReaderで取得可能?)も配列にセットするイメージなんですが・・・
書き方がイマイチわかりません。

当然ですがdeptno配列分問合せを発行したくありません。他のアイディア等ありましたら教えて下さい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-23 17:03
 ストアドプロシージャで配列を渡すことができるのは、ストアドプロシージャが配列を受け取ることができるからです。WHERE句の条件には配列を渡せませんので、同じようにはできません。

 1度に複数の条件を取ってきたいなら、その条件を並列に並べます。

WHERE DEPTNO=1 OR DEPTNO=2 OR ...
または
WHERE DEPTNO IN (1, 2, 3, ...)
託八郎
会議室デビュー日: 2004/02/23
投稿数: 2
投稿日時: 2004-02-23 17:34
早速のご返信ありがとうございます。

引用:

ストアドプロシージャで配列を渡すことができるのは、ストアドプロシージャが配列を受け取ることができるからです。WHERE句の条件には配列を渡せませんので、同じようにはできません。



なるほど。ということはSELECT文をプロシージャに組み込んで、too_many_rowsに気をつけて選択リストの値を戻すようにしてもできそうですね。

引用:

 1度に複数の条件を取ってきたいなら、その条件を並列に並べます。

WHERE DEPTNO=1 OR DEPTNO=2 OR ...
または
WHERE DEPTNO IN (1, 2, 3, ...)



なるほど。このケースだと条件を適当な大きさに切って発行する必要がありますね。
今回はプロシージャにした方が簡単なようなので上のやつで試してみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)