我写了触发器来检查客户是否有任何暂停的帐户。如果是,他将无法创建新帐户,但是当我尝试插入时,插入仍然会通过。有人可以帮助我吗?触发器和计数(*)不起作用
CREATE OR REPLACE TRIGGER SuspendedAccount
BEFORE INSERT ON ACCOUNT
FOR EACH ROW
DECLARE
varIsProblemAccount Int;
BEGIN
SELECT COUNT(*) INTO varIsProblemAccount
FROM ACCOUNT
WHERE CUSTID = :new.custID
AND ACCSTATUS = 'Suspended';
IF (varIsProblemAccount >= 1) THEN
DBMS_OUTPUT.PUT_LINE('*************************************************');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE(' Transaction canceled. ');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE(' Refer customer to the manager immediately. ');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('**************************************************');
RETURN;
END;
ELSIF (varIsProblemAccount = 0) THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('*************************************************');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE(' Transaction completed. ');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE(' Thank the customer for their business. ');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('**************************************************');
END;
END IF;
END;
对不起,我试图更改为0,因为它永远是“空”,但它仍然没有工作
我认为你不能在同一个表的触发器触发是做DML。这会引发一个“变异表”异常? – Rene