Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在oracle中使用不同的where条件更新多行_C#_Oracle_Oracle Sqldeveloper - Fatal编程技术网

C# 如何在oracle中使用不同的where条件更新多行

C# 如何在oracle中使用不同的where条件更新多行,c#,oracle,oracle-sqldeveloper,C#,Oracle,Oracle Sqldeveloper,我在c#中有一个int和string列表,其中int是主键,string是name 例如:{1,2},{“fist”,“second”} 我需要使用以下过程更新oracle中的值 假设我有如下过程,其中list作为数组传递给varchar 过程更新名称 ( VARCHAR中的id, VARCHAR中的名称 ) 是 开始 结束updatename 在不使用case语句的情况下,我应该暗示的逻辑是什么呢?好的,那么也许您有一个表(其名称最好不是“table”!)-假设它被称为tbl,至少有两列,id

我在c#中有一个int和string列表,其中int是主键,string是name

例如:{1,2},{“fist”,“second”}

我需要使用以下过程更新oracle中的值

假设我有如下过程,其中list作为数组传递给varchar

过程更新名称

VARCHAR中的id,
VARCHAR中的名称
)
是 开始
结束updatename


在不使用case语句的情况下,我应该暗示的逻辑是什么呢?好的,那么也许您有一个表(其名称最好不是“table”!)-假设它被称为tbl,至少有两列,id和name。您有一个字典,其中包含列id和名称(或任何其他列名)

然后-使用
merge
语句:

merge into tbl
  using dictionary
    on (tbl.id = dictionary.id)
when matched then
  update set name = dictionary.name
;

您也可以使用
update
语句,但当更新从另一个表读取时,
merge
更易于读取和维护,有时也可能更高效。

标准SQL方法是:

UPDATE table 
SET name =
    CASE WHEN id=1 THEN "first" 
    CASE WHEN id=2 THEN "second"
    END
WHERE id IN (1,2)

另一个选项是创建临时表,插入所有键值对,并在
UPDATE
语句中执行
JOIN

有什么问题?你不知道如何使用ado.net进行更新吗?我需要在单个过程中进行批量更新。你甚至不需要一个过程来完成此操作,这是一个简单的SQL语句。(不过这是在ado.net中完成的,我不太熟悉。)您需要将字典转换为
数据表
。我几乎可以肯定字典是
C
list@JuanCarlosOropeza-然后OP(或熟悉ado.net和C#to-Oracle的人)将演示如何“查看”C#list作为视图或临时表。@NicholasKrasnov-当然,这就是我要写的。现在修复它。我需要将c#代码中的int、string字典作为varchar或任何其他数据类型传递给oracle过程,并使用out case语句高效地进行更新,因为我将拥有大量数据。我知道一点c#,但从不同的上下文来看,我没有在oracle中使用它。如果您知道如何从c#传递数据以在Oracle中创建临时表,您可以使用上面的
merge
语句。@mathguy不适用于计算机:)哦-如果计算机将生成代码,那么我同意。:-)
UPDATE table 
SET name =
    CASE WHEN id=1 THEN "first" 
    CASE WHEN id=2 THEN "second"
    END
WHERE id IN (1,2)