我想编写一个触发器,它将在插入表之前触发,并将检查特定列的范围。这是我的代码
create or replace TRIGGER
ABC_BI_TRIGGER
BEFORE INSERT ON
TEMP_TABLE
FOR EACH ROW
DECLARE
maxUID number;
abcUID number;
BEGIN
maxUID := 1500;
select new.ABC_UID into mslUID from dual;
if mslUID < maxUID THEN
raise_application_error (-20001, 'NO values available: contact RE');
END IF;
END;
/
我使用new.ABC_UID的方式不起作用,我是新手。 new.ABC_UID是在ABC_UID列的insert语句中传递的值。 如果您对此问题有任何其他选择,或者您可以在此代码中纠正我,请帮助我。 提前谢谢。
答案 0 :(得分:3)
摆脱不需要的select
:
maxUID := 1500;
if :new.ABC_UID < maxUID THEN
raise_application_error (-20001, 'NO values available: contact RE');
END IF;
如果你确实想要在变量中,因为你需要在其他地方:
maxUID := 1500;
mslUID := :new.ABC_UID;
if mslUID < maxUID THEN
raise_application_error (-20001, 'NO values available: contact RE');
END IF;
答案 1 :(得分:0)
您的代码会抛出错误。看下面原因的原因?代码的工作版本,如果你想和你的代码一起选择@Horse的解决方案。
Create or replace TRIGGER ABC_BI_TRIGGER
BEFORE INSERT ON TEMP_TABLE
FOR EACH ROW
DECLARE
maxUID number;
abcUID number; ---Redundant
mslUID number; ---Not declared in your code.
BEGIN
maxUID := 1500;
mslUID := :new.ABC_UID; --abc_uid is the column of table Temp_table
If mslUID < maxUID THEN
raise_application_error (-20001, 'NO values available: contact RE');
END IF;
END;
/