ORA-24344: 成功但有编译错误。触发顶点

ORA-24344: success with compilation error. Trigger apex

我正在尝试在 oracle apex 中创建一个触发器,它将 select 我在 UniversityRefNo 列中拥有的所有数据,并且不允许用户输入已经存在的值。但是,我一直收到此错误:"ORA-24344: success with compilation error." 如果有人能告诉我我做错了什么,那就太好了。

CREATE TABLE VOLUNTEER(
Volunteer_id         NUMBER(5) PRIMARY KEY,    
Title                VARCHAR2(5),    
VolName              VARCHAR2(30),   
UniversityRefNo      VARCHAR2(10),    
Address_Line_1       VARCHAR2(30),   
Address_Line_2       VARCHAR2(12),    
PostCode             VARCHAR2(12),    
Mobile_Number        NUMBER(12),    
Home_Number          NUMBER(12),    
Email                VARCHAR2(25),    
Ethnic_Group         VARCHAR2(10),    
VolunteerType        VARCHAR2(10),   
Register_Disable     VARCHAR2(3),  
Gender               VARCHAR2(1),  
Medical_Details      VARCHAR2(20),   
PassPortNumber       NUMBER(10),   
Nationality          VARCHAR2(10),   
Passport_Expiry_Date DATE,    
Date_of_Birth        DATE,   
Course_Name          VARCHAR2(20),   
Course_Year          VARCHAR2(10),   
Area_of_work         VARCHAR2(15),    
StaffManagerName     VARCHAR2(20),    
StaffManagerEmail    VARCHAR2(20),    
StaffManagerPhone    VARCHAR2(12));   

CREATE or replace trigger unirefnoTrigger    
before insert or update of UniversityRefNo ON VOLUNTEER for each row    
begin    
SELECT UniversityRefNo from VOLUNTEER    
if(UniversityRefno = :new.UniversityRefNo) then raise application error(UniversityRefNO || :new.UniversityRefNo || 'already exists');   
end if;    
end;

如果您想使 UniversityRefNo 列唯一,则不需要创建触发器,您可以像这样简单地创建一个唯一约束:

ALTER TABLE VOLUNTEER 
ADD CONSTRAINT UniversityRefNo_UK UNIQUE (UniversityRefNo);

仅出于学习目的,下面介绍了如何创建触发器来执行相同的操作,但我不建议您使用它。

CREATE or replace trigger unirefnoTrigger
before insert or update of UniversityRefNo ON VOLUNTEER for each row
university_count number;
begin
SELECT count(*) into university_count from VOLUNTEER where UniversityRefno=:new.UniversityRefNo;
if university_count<>0 then 
raise application error(-20000, :new.UniversityRefNo || ' already exists');
end if;
end;