2016-12-15 109 views
-3

我试图在oracle apex中创建一个触发器,它将选择我在UniversityRefNo列中的所有数据,并且不允许用户放入已存在的值。但是,我不断收到此错误:"ORA-24344: success with compilation error."如果有人可以告诉我什么即时做错了,那将是很大的。ORA-24344:编译错误成功。 Trigger apex

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; 

回答

0

如果你想列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; 
+0

我觉得OP的目的是给终端用户比一个更具描述性的错误消息“ORA-00001:唯一约束(constraint_name命令)违反了”,但是请注意,有更好的方法来做到这一点。 – Typo