我必须根据表中列c1的特定值将某些数据更新到数据库中,现在我必须对各种值执行相同操作为C1,但我不能使用if/else因为有太多的情况下,我想到了使用游标的解决方案,但我没有太多的经验与他们(或任何有关事宜)plz帮助我。如何使用不同的数据运行相同的sql很多次
我:
- 表
TAB1
- 值对(V1,V2)
SQL语句的列表为列表运行
UPDATE TAB1 SET C1=V2 where C1=V1
我必须根据表中列c1的特定值将某些数据更新到数据库中,现在我必须对各种值执行相同操作为C1,但我不能使用if/else因为有太多的情况下,我想到了使用游标的解决方案,但我没有太多的经验与他们(或任何有关事宜)plz帮助我。如何使用不同的数据运行相同的sql很多次
我:
TAB1
SQL语句的列表为列表运行
UPDATE TAB1 SET C1=V2 where C1=V1
如果这是一个一次性的
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
你不此操作不需要光标。如果你在一个表中的值对,只需使用:
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 ;
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;
}
}
*** *** SQL仅仅是*结构化查询语言* - 许多数据库系统使用的语言,但不是数据库产品...许多东西都是特定于供应商的 - 所以我们真的需要知道您使用的数据库系统**(以及哪个版本) ... –
oracle sql developer – MozenRath
值对的列表是否也会在表中显示? – rene