2

私のSQL定義の一部(用):

CREATE TABLE activities (
  id  BIGINT GENERATED BY DEFAULT AS IDENTITY,
  group_id  BIGINT NOT NULL
  CONSTRAINT pk_activities PRIMARY KEY (id)
);

と の間のシナリオinsertは次のとおりです。

  • id自動生成/自動インクリメント、
  • group_id指定された (null 以外) が指定された値に設定されている場合、
  • group_idid指定されていない場合は、生成されたばかりの値に設定されます

(テスト用)をターゲットにしています。

これはできますか?

4

2 に答える 2

1

これはトリガーを使用して行うことができます。トリガーを使用したくない場合は、次のように行を選択するときに NULL を処理します。

SELECT id, isnull(group_id, id) group_id FROM activities;
于 2013-04-03T09:26:39.650 に答える
1

デフォルト値を別の列の値に設定することはできません。

ただし、このタスクを実行するTRIGGERを作成できます。

これは PostgreSQL の例です。またはの前にある場合は、自動的に次のように置き換えcolumnられます。anothercolumnNULLINSERTUPDATE

CREATE OR REPLACE FUNCTION mytable_fn()
RETURNS trigger AS
$body$
BEGIN
    IF NEW.column ISNULL THEN
        NEW.column := NEW.anothercolumn;
    END IF;
    RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql';

CREATE TRIGGER mytable_trigger
BEFORE INSERT OR UPDATE ON mytable
FOR EACH ROW
EXECUTE PROCEDURE mytable_fn();
于 2013-04-03T09:20:37.640 に答える