ORACLE APEX 创建登录触发器

问题描述

我想在任何用户登录时使用特定条件(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  

enter image description here

或者另一种选择是在认证后创建一个进程

enter image description here

,

Apex 是无状态的,参见第一段 here。这意味着为每个页面渲染或后期处理创建一个新的数据库会话。我认为当用户浏览应用程序时,这会使登录触发不断触发。

您可以在您的应用程序中创建一个带有“身份验证后”点的应用程序进程。在用户进行身份验证后,该应用程序只会触发一次。

将此功能与数据库分开是有意义的。当您通过 sqldeveloper 连接或休息时也会触发登录触发器 - 这会影响性能。