おはよう誰もが、私は次のような場合について質問があります:postgresqlに一連の数字を挿入するためのトリガの作成方法。しかし、前に検証された挿入文は..?
私がトリガーと土地のコードを挿入しますが、行を挿入するとき、それは非常にうまく機能するときの機能を持っています。 しかし、式の問題で挿入ステートメントが実行されない場合、シーケンス関数は行を挿入する前に値を生成し、順序を失うことになります。
トリガーまたは関数を変更して、シーケンス関数に移動する前にINSERT式の前に私を検証し、それによってnumerationのジャンプを回避する方法があります。
副コード(トリガーと機能)と表の画像。
CODE:
CREATE TRIGGER trigger_codigo_pech
BEFORE INSERT ON independizacion
FOR EACH ROW
EXECUTE PROCEDURE codigo_pech();
CREATE OR REPLACE FUNCTION codigo_pech()
RETURNS trigger
AS $$
DECLARE
incremento INTEGER;
cod_inde text;
BEGIN
IF (NEW.cod_inde IS NULL OR NEW.cod_inde = '''') THEN
incremento = nextval ('codigo_pech');
NEW.cod_inde = 'PECH' || '-' || incremento;
END IF;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
あなたが見ることができるように、また、記数でジャンプを防ぐために、主キーにトリガを作るために必要であろう。
私はあなたの助けを願っています。あなたはincremento.cod_inde
DEFERRABLEを作成し、初期状態が遅延することができますあなたの
シーケンスが意図した、あるいは保証するものではありません、厳密に生産します連続番号。彼らは厳密に単調増加していることを保証します。コードを管理するための代替案を見つけてください。 – JimmyB