首页 > 解决方案 > 我想不通的 Oracle SQLDeveloper SQL TRIGGER 创建问题

问题描述

我想创建一个触发器来管理 2 个杂志,“Elle”和“Time”。

因此,如果用户试图在杂志表中插入一条与这两条不匹配的新记录,则不应保留后者。

我已经准备好了所有的桌子和东西,这没有问题。

问题是我无法找到正确执行此操作的方法,一位朋友说我的这段代码仅与行交互,并且我需要整个表的代码并建议我使用Cursor

这是我的代码:

Create or replace trigger TMag
After INSERT on Magazine
FOR EACH ROW
DECLARE
e EXCEPTION;
BEGIN
IF :new.mag_nom!= 'Elle' or :new.mag_nom!= 'Time' THEN
Delete from Magazine where ISBN=:new.ISBN;
raise e;
END IF;
exception
when e then dbms_output.put_line('nom mag incorrecte');
END;

看看我的桌子:

CLIENT(CIN, CL_NOM, CL_ADDR, CL_VILLE, EMAIL, CONTACT_NUM);
MAGAZINE(ISBN, MAG_NOM, PRIX_Mois);
ABONNEMENT(AB_ID, #ISBN, #IN_ID, Months);
INVOICE(IN_ID, #CIN, dateI, State) ;

提前致谢

标签: oracleplsqltriggers

解决方案


我认为您不需要触发器,而是通过创建CHECK约束在内部解决问题,例如

ALTER TABLE Magazine
ADD CONSTRAINT correcte_mag_nom  
  CHECK (mag_nom IN ('Elle', 'Time'));

如果提供的值不符合mag_nom列的条件,那么它将作为

ORA-02290 check constrain (<schema>.CORRECTE_MAG_NUM) violated

推荐阅读