/ / Oracleシーケンストリガー - oracle、plsql、トリガー、シーケンス

Oracleのシーケンス・トリガー - Oracle、plsql、トリガー、シーケンス

私はOracleにあまり精通していませんが、私は持っています私のアプリケーションがシーケンスを使用してレコードの番号付けを生成するためのトリガーを作成しました。私が抱えている問題は、番号がすでに使用されている可能性があり、その番号がすでに使用されているかどうかを確認するためのチェックを追加して、シーケンスから次の番号を選択することです。これは最初に行うことができます、そしてもしそうなら、どんな援助でも本当に感謝されるでしょうか?

DROP TRIGGER COMPLAIN_TRG_ENQUIRYNO;
CREATE OR REPLACE TRIGGER COMPLAIN_TRG_ENQUIRYNO
BEFORE INSERT
ON COMPLAIN REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
l_enquiry_no_end    complain.enquiry_no_end%TYPE;
BEGIN
SELECT seq_enquiryno.NEXTVAL INTO l_enquiry_no_end FROM   dual;
IF :NEW.ENQUIRY_NO_END = " " THEN
:NEW.ENQUIRY_NO_END := l_enquiry_no_end;
END IF;
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END ;

回答:

回答№1は0

既存のシーケンスを使わないでください列内の(数値)データが重複する可能性があるため。空から始めてシーケンスを使用するか、本当に行き詰まっている場合は最大pkを見つけてシーケンスのstartswithプロパティをリセットしてください。

あるいは、代わりにguidを使うこともできます常にグローバルに一意であるという利点を持つguid - あなたのトリガーでsys_guid()関数を呼び出します。しかし、それらは索引付けなどで他の問題を引き起こす可能性があります。