2013-01-02 37 views
3

我必须根据表中列c1的特定值将某些数据更新到数据库中,现在我必须对各种值执行相同操作为C1,但我不能使用if/else因为有太多的情况下,我想到了使用游标的解决方案,但我没有太多的经验与他们(或任何有关事宜)plz帮助我。如何使用不同的数据运行相同的sql很多次

我:

  • TAB1
  • 值对(V1,V2)
  • SQL语句的列表为列表运行

    UPDATE TAB1 SET C1=V2 where C1=V1 
    
+0

*** *** SQL仅仅是*结构化查询语言* - 许多数据库系统使用的语言,但不是数据库产品...许多东西都是特定于供应商的 - 所以我们真的需要知道您使用的数据库系统**(以及哪个版本) ... –

+0

oracle sql developer – MozenRath

+0

值对的列表是否也会在表中显示? – rene

回答

2

如果这是一个一次性的

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 
3

你不此操作不需要光标。如果你在一个表中的值对,只需使用:

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 ; 
+0

我没有它在一张桌子上,但在我的记事本 – MozenRath

+0

@MozenRath为什么不把你的记事本列表保存到临时表,并遵循ypercube的方式(他写的更新或合并)? – DazzaL

+0

嗯...只是意识到没有简单的方法:P。将临时创建一个表。尽管想避免这种情况,但我只需稍后删除它 – MozenRath

-1
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; 
      } 

     } 
相关问题