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

Oracle MERGE:NOTMATCHEDのみがトリガーされます

    マージの目的を誤解していると思います。

    あなたのテーブルは次のようなものになると思います:

    CREATE TABLE TABLE_FOR_TESTS (
        d DATE,
        t NUMBER(8),
        CONSTRAINT TABLE_FOR_TESTS_PK PRIMARY KEY (d)
    )
    

    次に、マージステートメントは次のようになります。

    MERGE INTO TABLE_FOR_TESTS t
      USING (SELECT trunc(sysdate) d FROM DUAL) s
        ON (s.d = t.d)
      WHEN MATCHED THEN
        UPDATE SET t = t+1
      WHEN NOT MATCHED THEN         
        INSERT (d, t) VALUES (trunc(sysdate), 1)
    

    ここで、結合はテーブルの主キー上にあり、そのPK値のレコードが存在するかどうかに応じて更新または挿入します。

    これには、1日あたり最大1つのレコードがあり、tは1日あたりのこのステートメントの実行数を保持します(TABLE_FOR_TESTSに他のDMLがないと仮定します)。

    注:sysdate自体には、時間コンポーネントが含まれています。 trunc(sysdate)はそれを削除し、時刻を00:00:00に設定します。




    1. MySQLワークベンチでrootユーザーのパスワードをリセットする方法

    2. Mysql:タイプがビットの列をクエリする方法は?

    3. タイムスタンプによるphpmysqlの順序が正しくありません

    4. 列からテーブルにテキストを正規化する最も効率的な方法は何ですか?