我有一个名为users的表,其中有一个accountlocked字段...该字段的可能值为Y和N ...如果前端用户使用3次错误的密码登录,则accountlocked将为Y,这意味着帐户已锁定...但是我有一个特定的用户,我不希望将锁定的帐户更新为Y ...我创建了一个触发器,一旦它为Y,就可以将其更新为N ...,但是我只是不想该用户首先将字段更新为Y atall
CREATE OR REPLACE TRIGGER traccountunlock AFTER
UPDATE OF accountlocked ON users
FOR EACH ROW
WHEN (new.username=‘Testuser ’)
BEGIN
IF :new.accountlocked = 'Y' THEN
UPDATE users
SET
accountlocked = 'N'
WHERE
username IN (
'Testuser'
);
END IF;
END;
这是可行的,但是在字段更新为Y后才执行,但是我不希望它首先更新为Y,例如...,而不是仅适用于视图而不是oracle中的表
注意:我可以通过Java代码来完成此操作,但是,我并不需要该解决方案,因为它需要部署和将来的问题
最佳答案
约束是什么?
create table t (
username varchar2(30),
accountlocked varchar2(1) check( accountlocked in ('Y','N') ),
constraint not_lock_testuser check( (username,accountlocked) != (('Testuser', 'Y')) )
);
做完了!
最好的祝福,
炖阿什顿