【问题标题】:ORA-24344: success with compilation error. Trigger apexORA-24344: 编译错误成功。触发顶点
【发布时间】:2017-05-01 14:46:02
【问题描述】:

我正在尝试在 oracle apex 中创建一个触发器,它将选择我在 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;

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    如果您想使 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;
    

    【讨论】:

    • 我认为 OP 的目的是为最终用户提供比“ORA-00001:违反唯一约束(constraint_name)”更具描述性的错误消息,但是是的,有更好的方法来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多