我必須根據表中列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