oracle - 我想不通的 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) ;
提前致谢
解决方案
我认为您不需要触发器,而是通过创建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
推荐阅读
- ruby - 如何获取无头浏览器的用户代理
- r - 计算 R 中每组表中的频率
- python - Python Pandas 使用 .iloc 基于索引更新值
- html - 跨 div 的中心水平线
- unit-testing - 如何对 Flutter TextFormField 进行单元测试
- python - Charmap 编解码器无法在 python 中使用 gzipped 文件解码字节错误
- lets-encrypt - dns01 验证:正在颁发证书。颁发的临时证书
- c++ - 在 C++ 中,可以在数组 ref 和指针之间消除歧义吗?
- vue.js - 在 Nuxt 轮播组件中显示视频
- polymer-2.x - 如果尝试从可排序组中仅移动一张卡片,则会拖动两个可排序项目