我有一个名为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')) )
);


做完了!

最好的祝福,
炖阿什顿

07-25 21:37