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

Postgres Insert Into View Rule with Returning Clause

    INSTEAD OF INSERTを使用する方がはるかに優れています ここでトリガー:

    CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
    DECLARE
      id integer;
    BEGIN
      INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
      INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
      RETURN NEW;
    END; $$ LANGUAGE PLPGSQL;
    
    CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
      FOR EACH ROW EXECUTE PROCEDURE MyFuncName();
    

    シーケンスの現在の値をチェックして、別のテーブルに挿入されたものを確認することは、悪い悪い悪いです。 練習。単一のトランザクションでここにいる間でも、それをしないでください。

    RETURNINGの問題について混乱しています 私もあなたの質問を読んだときに混乱しているので、情報。関数内でINTOを使用します ローカルで宣言された変数にデータを入力して、後続のステートメントで使用できるレコード値を保持する句。関数の外では、RETURNINGを使用します 最上位のコードスニペットと同じように句を使用します。




    1. 文字列フィールドのOraclenullチェック

    2. Postgres8.4の各行に対して1回呼び出される関数で更新します

    3. Oracle <>、!=、^=演算子

    4. mySqlデータベーステーブルの日付形式を変更する