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

Oracle11gからPostgresql8.4へのトリガーの移行

    Postgresのトリガーはトリガーコードを直接提供しませんが、トリガー関数を呼び出します 、任意の数のトリガーから呼び出すことができますが、多くの場合、1つの特定のテーブルの1つの特定のイベント用にカスタマイズされています。

    トリガー機能:

    CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
      RETURNS trigger AS
    $func$
    BEGIN
    
    INSERT INTO some_tbl(key, name, describe)   -- or some_other_tbl?
    VALUES (OLD.key, OLD.name, OLD.describe);
    
    RETURN OLD;
    
    END
    $func$ LANGUAGE plpgsql 
    

    トリガー:

    CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
    AFTER UPDATE OR DELETE ON some_tbl
    FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
    
    • AFTERにします 単純化するためのトリガー。 BEFORE トリガーはRETURN NEWする必要があります 更新を機能させるためですが、NEW DELETEには表示されません 引き金。したがって、IF TG_OP = ...が必要になります など

    • 永続化されたINSERTのターゲットリストを常に提供します ステートメント。これは、Oracleトリガーでも同様に悪いことです。

    • おそらくserialのテーブルがあります 桁。挿入で言及しないでください。シーケンスの次のIDが自動的に挿入されます。

    SOには多数のコード例があります。




    1. PHPを使用してmysqlデータベースに画像を保存する方法

    2. Laravelのデータベースレイヤーをスタンドアロンで使用できますか?

    3. データベースメールアカウント(SSMS)を更新する

    4. 異なるデータベースのテーブルを結合する(PostgreSQL)