OceanBase logo

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

ドキュメント

会社概要

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

日本 - 日本語
International - English
中国站 - 简体中文
クラウドで始める

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

クラウドで始める
编组
すべての製品
    • データベース
    • アイコンOceanBaseデータベース
アイコン

OceanBaseデータベース

V4.3.5

    OceanBase logo

    AI時代を支える分散データベース

    日本 - 日本語
    International - English
    中国站 - 简体中文
    プロダクト
    OceanBase Cloudエンタープライズ版コミュニティ版OceanBase seekdb
    会社概要
    OceanBaseについて法的情報お問い合わせ
    公式アカウント
    ConnpassXQiitaLumaGitHub

    © OceanBase 2026. All rights reserved

    クラウドサービス契約個人情報保護ポリシーセキュリティ
    お問い合わせ
    ドキュメントフィードバック
    1. ホーム
    2. OceanBaseデータベース
    3. V4.3.5
    アイコンOceanBaseデータベース
    V 4.3.5
    • V 4.3.5

    自律トリガー

    最終更新日:2026-04-15 06:09:05  更新
    シェア
    このページの内容
    シェア

    TCLまたはDDLステートメントを実行するためには、トリガーが自律的である必要があります。DDLステートメントを実行するには、トリガーは動的SQLを使用する必要があります。

    適用対象

    この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。

    トリガーの一つの用途は、イベントを透過的に記録することです。例えば、すべての挿入操作をテーブルに記録し、ロールバックされたレコードであっても同様です。

    以下の例では、emp テーブルに行が挿入されるたびに、トリガーはその行をログテーブルにも挿入します。トリガーは自律的であるため、変更がメインテーブルにコミットされるかどうかに関係なく、ログテーブルに変更をコミットできます。

    obclient> CREATE TABLE emp(
           empno          NUMBER(4,0),
           empname        VARCHAR(10),
           job            VARCHAR(10),
          deptno          NUMBER(2,0),
          salary          NUMERIC
       );
    Query OK, 0 rows affected
    
    obclient> INSERT INTO emp VALUES (200,'Jennifer','AD_ASST',1,15000);
    obclient> INSERT INTO emp VALUES (202,'Pat','MK_REP',2,12000);
    obclient> INSERT INTO emp VALUES (119,'Karen','PU_CLERK', 4,10000);
    obclient> INSERT INTO emp VALUES (118,'Guy','PU_CLERK', 4,10000);
    obclient> INSERT INTO emp VALUES (201,'Michael','MK_MAN',3,9000);
    
    obclient> CREATE TABLE log_sal (
          log_id   NUMBER(8),
          upsal_date  DATE,
          new_sal  NUMBER(10,2),
          old_sal  NUMBER(10,2)
        );
    Query OK, 0 rows affected
    
    obclient> CREATE OR REPLACE TRIGGER emp_sal
          BEFORE UPDATE OF salary ON emp FOR EACH ROW
        DECLARE
          PRAGMA AUTONOMOUS_TRANSACTION;
        BEGIN
          INSERT INTO log_sal (
            log_id,
            upsal_date,
            new_sal,
            old_sal
          )
          VALUES (
            :old.empno,
            SYSDATE,
            :new.salary,
            :old.salary
          );
          COMMIT;
        END;
        /
    
    Query OK, 0 rows affected
    
    obclient> UPDATE emp SET salary = salary * 1.08
     WHERE empno = 119;
    Query OK, 1 row affected
    Rows matched: 1  Changed: 1  Warnings: 0
    
    obclient> COMMIT;
    Query OK, 0 rows affected
    
    obclient> UPDATE emp
     SET salary = salary * 1.08
     WHERE empno = 200;
     Query OK, 1 row affected
    Rows matched: 1  Changed: 1  Warnings: 0
    
    obclient> ROLLBACK;
    Query OK, 0 rows affected
    
    -- Show that both committed and rolled-back updates
    -- add rows to log table
    
    obclient> SELECT * FROM log_sal
     WHERE log_id = 119 OR log_id = 200;
    +--------+------------+---------+---------+
    | LOG_ID | UPSAL_DATE | NEW_SAL | OLD_SAL |
    +--------+------------+---------+---------+
    |    119 | 08-MAY-21  |   10800 |   10000 |
    |    200 | 08-MAY-21  |   16200 |   15000 |
    +--------+------------+---------+---------+
    2 rows in set
    

    前のトピック

    自律トランザクションの制御
    最後

    次のトピック

    SQLから自律関数を呼び出す
    次