3

テーブルの列 c1 の特定の値に基づいて、一部のデータを db に更新する必要があります。c1 のさまざまな値に対して同じことを行う必要がありますが、ケースが多すぎるため、if/else を使用できません。カーソルを使用した解決策を考えますが、私はそれらの経験があまりありません(またはその点についてはまったく経験がありません)plzが私を助けてくれます。

私は持っている:

  • テーブルTAB1
  • 値のペアのリスト (V1、V2)
  • リストに対して実行する SQL ステートメント

    UPDATE TAB1 SET C1=V2 where C1=V1
    
4

3 に答える 3

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 ;
于 2013-01-02T09:56:46.347 に答える
2

これが 1 回限りの作業である場合は、適切な列ベースのテキスト エディターを使用して、次のデータ セットを変更できます。

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
于 2013-01-02T11:42:26.263 に答える
-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;
            }

        } 
于 2013-01-02T10:14:30.533 に答える