PL/SQL触发器以防止重复

Ric*_*ane 0 oracle triggers plsql duplicates

我有一个名为TBLAPPLICATION的表,它保存数据,指定个人的ID号和他们申请的作业的JobID.每个ID号可以具有无限数量的应用程序,只要JobID每次都不同,因此没有重复的应用程序.

create or replace
   TRIGGER trg_duplicateapplication BEFORE INSERT ON tblapplication FOR EACH ROW

BEGIN
   IF :NEW.studentrecordnumber_fk_nn = :OLD.studentrecordnumber_fk_nn THEN
      IF :NEW.jobid_fk_nn = :OLD.jobid_fk_nn
         THEN RAISE_APPLICATION_ERROR( -20003, 'Error: duplicate application. You have already applied for this position.');
      END IF;
   END IF;
END;
Run Code Online (Sandbox Code Playgroud)

所以上面的代码不起作用,我希望如此.有人可以突出我的错误吗?:)

小智 8

既然这样,你的触发器比较插入的值(:NEW.studentrecordnumber_fk_nn用不存在等):OLD(:OLD没有任何意义到INSERTTRIGGER- 它的域总是null).

除此之外,这几乎肯定可以通过DRI而不是触发器完成 - 如何在一个独特的索引上(studentrecordnumber_fk_nn, jobid_fk_nn)