sql >> データベース >  >> RDS >> Oracle

特定のシナリオで選択したOracleクエリを更新に変換

    クエリからテーブルを更新する優れた方法は、MERGEステートメントを使用することです。これは、all_objectsをコピーし、その行の所有者とタイプに一致するオブジェクトの数の列を追加する例です。

    CREATE TABLE all_objects_2 AS
    SELECT *
      FROM all_objects;
    
    ALTER TABLE all_objects_2 add owner_and_type_ct NUMBER;
    
    MERGE INTO all_objects_2 ao2
    USING (SELECT ao.owner,
                  ao.object_type,
                  COUNT(*) AS ct
             FROM all_objects ao
            GROUP BY ao.owner,
                     ao.object_type) x
    ON (ao2.owner = x.owner AND ao2.object_type = x.object_type)
    WHEN MATCHED THEN
      UPDATE
         SET ao2.owner_and_type_ct = x.ct;
    
    SELECT ao2.owner,
           ao2.object_name,
           ao2.object_type,
           ao2.owner_and_type_ct
      FROM all_objects_2 ao2
     WHERE rownum < 10;
    /*
    SYS C_TS# CLUSTER 10
    SYS I_TS# INDEX 1459
    SYS C_FILE#_BLOCK#  CLUSTER 10
    SYS I_FILE#_BLOCK#  INDEX 1459
    SYS FET$  TABLE 1592
    SYS UET$  TABLE 1592
    SYS SEG$  TABLE 1592
    SYS UNDO$ TABLE 1592
    SYS TS$ TABLE 1592
    */
    

    [クエリ]を使用して[宛先テーブル]にマージし、[クエリを宛先に結合する基準]を使用し、行を一致させると、クエリの値で行を更新します。 MERGEを使用してINSERTとDELETEを実行することもできますが、すべてのドキュメント




    1. SQLServerで「代わりの」トリガーを作成する

    2. .NETを使用してmySQLにボット状態データを保存する

    3. mysqlテーブルをハイブに転送する方法は?

    4. SQLServerのSelectステートメントでNULL値を持つ行をフィルタリングする方法-SQLServer/TSQLチュートリアルパート110