【发布时间】:2019-09-19 13:29:49
【问题描述】:
我有一个名为 users 的表,其中有一个 accountlocked 字段...该字段的可能值是 Y 和 N ...如果来自前端的用户使用 3 次错误密码尝试登录,那么 accountlocked 将是 Y,这意味着帐户已锁定...但我有一个特定用户,我不希望将帐户锁定更新为 Y...我创建了一个触发器,一旦它是 Y...就可以将其更新为 N...但我只是不不希望该特定用户首先将字段更新为 Y
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 代码做到这一点,但我不是在寻找那个解决方案,因为它需要部署和未来的问题
【问题讨论】:
-
这应该在您的应用程序中更方便地处理。
-
是的,我们知道,但出于各种原因,我们正在通过 SQL 寻找一些东西。感谢您对此进行调查
-
就像@GMB 所说,您可以轻松地解决您的应用程序中的问题。你能解释一下为什么你不想这样做吗?我看到你不想因为部署和未来的问题,但你能更具体一点
-
这有两个原因。 1.我不想在产品代码中硬编码一些测试用户 2.如果测试团队需要新用户或类似的东西,我们再次需要推送这些更改并在 sprint 过程中部署它,这又需要很多跟踪和昂贵的东西,因此希望借助触发器或 SQL DB @Collin 的某些东西来将其解耦