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;
我正在尝试在 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;