Dee*_*pak 2 c# sql oracle stored-procedures
我有一个oracle存储过程,该存储过程使用以下语句更新表。
update boxes
set location = 'some value'
where boxid = passed value
Run Code Online (Sandbox Code Playgroud)
我有一个页面,用户可以选择100多个框并用新的位置值更新它们。当前,我必须调用存储过程100次以上以更新每个框(通过每次传递一个boxid)。
我想知道如何将Boxid列表从中传递C#到存储过程中,这样我就只能调用存储过程一次。
我希望在update语句中使用where in(boxids)种where子句。
请让我知道如何实现这一目标。提前致谢!
Oracle允许您将值的数组作为参数传递。从这个SO问题以及这个问题中借用,您可以定义如下INT_ARRAY类型:
create or replace type CHAR_ARRAY as table of INTEGER;
Run Code Online (Sandbox Code Playgroud)
然后将您的存储过程定义为:
CREATE OR REPLACE PROCEDURE product_search(
...
myIds IN CHAR_ARRAY,
...)
AS
SELECT ...
...
WHERE SomeIdField IN (Select column_value FROM TABLE(myIds))
...
Run Code Online (Sandbox Code Playgroud)
然后,可以通过如下设置OracleParameter.CollectionType属性来传递值列表:
OracleParameter param = new OracleParameter();
param.OracleDbType = OracleDbType.Int32;
param.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8065 次 |
| 最近记录: |