【发布时间】:2020-12-23 13:41:05
【问题描述】:
我正在尝试在 PLSQL 中实现插入触发器后。
目标是检查每个客户端是否有多个 (>1) 行具有特定状态。
如果是这样,我想提出一个例外并将插入回滚。
我正在努力实现无警告查询,这会在插入过程中导致错误。
我该如何管理这个?
这是我实现的触发器,我猜它需要一些更改。
CREATE TRIGGER blatrigger
AFTER INSERT
ON BLATABLE
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
exception_name EXCEPTION;
PRAGMA EXCEPTION_INIT (exception_name, -20999);
BEGIN
if (select count(*) as counter from BLATABLE where CLIENTID = :NEW.CLIENTID and STATUS='PENDING').counter > 1
THEN
raise exception_name;
END IF;
END;
这是表格本身:
create table BLATABLE
(
ID NUMBER(19) not null primary key,
CLIENTID NUMBER(10),
CREATED TIMESTAMP(6),
STATUS VARCHAR2(255 char)
);
【问题讨论】:
-
本地声明的异常的目的是什么?调用者只会得到一个没有任何信息的匿名 ORA-20999 错误。最好
raise_application_error(-20999, 'Some message describing the problem including diagnostic details'); -
顺便说一句,
REFERENCING NEW AS NEW OLD AS OLD没有做任何事情。除非您想使用一些非默认标签名称来引用事物,否则我会完全忽略它。 -
@WilliamRobertson 是的,你的评论很有道理。一开始我只是试着让触发器工作。
标签: sql oracle plsql triggers sql-insert