我必须根据表中列 c1 的特定值将一些数据更新到数据库中,现在我必须为 c1 的各种值做同样的事情,但我不能使用 if/else,因为我的情况太多了想一个使用游标的解决方案,但我对它们没有太多经验(或者根本没有任何经验)请帮助我。
我有:
- 桌子
TAB1
- 值对列表 (V1, V2)
为列表运行的 SQL 语句
UPDATE TAB1 SET C1=V2 where C1=V1
此操作不需要光标。如果表中有值对,只需使用:
UPDATE
( SELECT t.C1, vp.V2
FROM
TAB1 t
JOIN
ValuePairs vp
ON t.C1 = vp.V1
) tmp
SET C1 = V2 ;
如果它只是一个列表,您可以使用派生表:
UPDATE
( SELECT t.C1, vp.V2
FROM
TAB1 t
JOIN
( SELECT 1 V1, 2 V2 FROM dual
UNION ALL
SELECT 2, 3 FROM dual
-- ...
UNION ALL
SELECT 19, 23 FROM dual
) vp
ON t.C1 = vp.V1
) tmp
SET C1 = V2 ;
如果这是一次性工作,那么使用一个不错的基于列的文本编辑器,您可以从以下位置修改您的数据集:
1 2
3 4
... 到 ...
select 1 v1 2 v2 from dual union all
select 3 v1 4 v2 from dual union all
...等,然后将其用作合并语句的一部分,以避免处理更新连接基数检查的需要
merge into tab1 using (
select 1 v1 2 v2 from dual union all
select 3 v1 4 v2 from dual union all
... ) src
on (src.v1 = tab1.c1)
when ... etc
you can try like this without creating the table.
bytes = readFile(FilenamewithPath);
file = Encoding.ASCII.GetString(bytes);
public static byte[] readFile(bool delFileOnRead, string fileNameWithPath)
{
try {
FileStream fsSource = new FileStream(fileNameWithPath, FileMode.Open, FileAccess.Read);
byte[] retVal = new byte[fsSource.Length];
int numBytesToRead = (int)fsSource.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
int n = fsSource.Read(retVal, numBytesRead, numBytesToRead);
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
fsSource.Close();
fsSource.Dispose();
if (delFileOnRead)
{
File.Delete(fileNameWithPath);
}
return retVal;
}
catch(Exception ex) {
throw ex;
}
}