问题描述
我想在任何用户登录时使用特定条件(where 子句)更新我的表的状态..
create or replace TRIGGER AUTO_COMPLETE
AFTER logoN ON SCHEMA
BEGIN
UPDATE SESSIONS
SET SESSIONS.STATUS = 5
WHERE SESSIONS.STATUS =2
AND TO_CHAR(SESSIONS.SESSION_DATE,'MM-DD-YYYY HH24.MM') < TO_CHAR (SYSDATE,'MM-DD-YYYY HH24.MM');
END AUTO_COMPLETE;
不幸的是,这个触发器没有被触发,我没有错误!!
解决方法
我认为最好的方法是在您的应用设置中,您可以使用绑定变量来验证用户名或其他内容。
Shared components / Security Attributes / Database Session
或者另一种选择是在认证后创建一个进程
,Apex 是无状态的,参见第一段 here。这意味着为每个页面渲染或后期处理创建一个新的数据库会话。我认为当用户浏览应用程序时,这会使登录触发不断触发。
您可以在您的应用程序中创建一个带有“身份验证后”点的应用程序进程。在用户进行身份验证后,该应用程序只会触发一次。
将此功能与数据库分开是有意义的。当您通过 sqldeveloper 连接或休息时也会触发登录触发器 - 这会影响性能。