回答

收藏

将C#传输到中间的整数列表Oracle存储过程中

技术问答 技术问答 211 人阅读 | 0 人回复 | 2023-09-13

我有一个oracle在存储过程中,使用以下更新表。
( R* r* K2 n+ P6 Fupdate boxes set    location = 'some value'where  boxid = passed value我有一个页面,用户可以选择100多个框,并使用新的位置值进行更新。目前,我必须调用存储过程100次以上来更新每个框(通过每次传输一个)boxid)。- [' W9 b8 z  m7 d5 r# C$ ?/ W1 k( U
我想知道怎么做Boxid从中传递列表C#在存储过程中,我只能调用一次存储过程。
3 v9 |& v& ?7 j, |2 W% H- b我希望在update 用于句子中where in(boxids)    种where子句。8 y( P! \: s8 c" z
请让我知道如何实现这个目标。提前感谢!
# W) u) d; v. N0 Q                                                                # \4 b+ T# |2 |; z6 D1 h- o/ V
    解决方案:                                                               
  E2 I% |( f3 g9 s. w6 t                                                                Oracle允许您以值数组为参数传输。从[这个SO问题](https://codingdict.com/questions你可以定义一个/213298和这个问题INT_ARRAY这种类型:
! |5 S& Y2 @/ I# i  ]create or replace type CHAR_ARRAY as table of INTEGER;然后将您的存储过程定义为:
. E* b5 z  `( U. \+ Q# e0 HCREATE OR REPLACE PROCEDURE product_search(         ...        myIds IN CHAR_ARRAY,       ...)AS      SELECT ...    ...    WHERE SomeIdField IN (Select column_value FROM TABLE(myIds))    ...然后,可以通过如下设置OracleParameter.CollectionType属性传递值列表:! F* w6 \- i8 [
OracleParameter param = new OracleParameter();param.OracleDbType = OracleDbType.Int32;param.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则