Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-24344:编译错误成功。触发顶点_Sql_Oracle_Oracle Apex - Fatal编程技术网

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

Sql ORA-24344:编译错误成功。触发顶点,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我试图在OracleApex中创建一个触发器,它将选择UniversityRefNo列中的所有数据,并且不允许用户输入已经存在的值。然而,我一直遇到这样的错误:“ORA-24344:编译错误成功。”如果有人能告诉我我做错了什么,那就太好了 CREATE TABLE VOLUNTEER( Volunteer_id NUMBER(5) PRIMARY KEY, Title VARCHAR2(5), VolName

我试图在OracleApex中创建一个触发器,它将选择UniversityRefNo列中的所有数据,并且不允许用户输入已经存在的值。然而,我一直遇到这样的错误:
“ORA-24344:编译错误成功。”
如果有人能告诉我我做错了什么,那就太好了

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;
创建或替换触发器unirefnoTrigger
在插入或更新每行志愿者的大学参考号之前
大学数量;
开始
选择count(*)进入大学\大学参考编号=:new.UniversityRefno;
如果大学是0那么
引发应用程序错误(-20000,:new.UniversityRefNo | |“已存在”);
如果结束;
终止

我认为OP的目的是给最终用户一个比“ORA-00001:违反了唯一约束(约束名称)”更具描述性的错误消息,但是是的,有更好的方法来做到这一点。