我试图在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)
);
通过删除FOR EACH ROW
和转换为以下代码,使用语句级触发器,而不是行级:
CREATE OR REPLACE TRIGGER blatrigger
AFTER INSERT ON BLATABLE
REFERENCING NEW AS NEW OLD AS OLD
DECLARE
counter INT;
exception_name EXCEPTION;
PRAGMA EXCEPTION_INIT(exception_name, -20999);
BEGIN
SELECT MAX(COUNT(*))
INTO counter
FROM BLATABLE
WHERE STATUS = 'PENDING'
GROUP BY CLIENTID;
IF counter > 1 THEN
RAISE exception_name;
END IF;
END;
/
哪里
IF .. THEN
条件中删除本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句