我在 Oracle Apex 中创建了一个任务分配应用程序,其中包含几个基于我创建的表的交互式网格页面。该表称为
DEMANDE_INTERVENTION
并且有一列(以及其他列)称为 DEMANDEUR
。在一个页面中,我只想显示值为 DEMANDEUR
的记录,该值等于登录用户的名称。我尝试在 DEMANDEUR=:APP_USER
子句中添加条件 WHERE
但它似乎没有用。我也试过使用条件:
DEMANDEUR = V('APP_USER')
DEMANDEUR =SYS_CONTEXT('APEX$SESSION', 'APP_USER')
DEMANDEUR =SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY')
DEMANDEUR =SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
DEMANDEUR =SYS_CONTEXT('USERENV','CURRENT_USER')
我还尝试使用以下查询来检查里面的内容
:APP_USER
:
select DEMANDEUR,
INTERVENTION,
ETAT_IMPORTANCE,
"VALIDÉE_PAR",
ETAT_INTERVENTION,
LIEU,
"DATE_DE_CRÉATION",
OBSERVATION,
:APP_USER
from DEMANDE_INTERVENTION
但只显示了第一列:
我该怎么做才能解决这个问题?
我不使用 APEX,但是如果它以您自己(私人帐户)而不是普通应用程序帐户的身份登录,并且这是您所指的用户,那么无论您的客户端应用程序环境如何,都在数据库中在 SQL 或 PL/SQL 中,您始终可以使用变量
USER
来获取当前登录用户的身份。所以:
SELECT ..
WHERE requester = USER
应该适合你。还有几个“USERENV”选项可用:
SELECT ..
WHERE requester = SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY') -- account used to connect to the database (can be different if proxy is used)
SELECT ..
WHERE requester = SYS_CONTEXT('USERENV','CURRENT_SCHEMA') -- default schema if objects are not fully qualified. Can be changed by ALTER SESSION SET CURRENT_SCHEMA
SELECT ..
WHERE requester = SYS_CONTEXT('USERENV','CURRENT_USER') -- user whose privs are active. In stored procs can be the procedure owner (not the session executing it) if AUTHID is at its default of DEFINER.
在任何顶点会话中,当前用户的值存储在绑定变量中
APP_USER
。在 sql/plsql 中,可以使用语法:APP_USER
将此变量作为绑定变量访问。请注意,在您的示例中,“:”和“APP_USER”之间没有空格。
如果你想访问对象中的变量(视图/包/触发器/...)那么绑定变量不是一个选项。在那导致 sys_context 变量
SYS_CONTEXT('APEX$SESSION', 'APP_USER')
或旧的“V”函数(V('APP_USER')
)
所有记录在这里
现在回答你的问题我能做些什么来解决这个问题?。嗯...调试。使用来源创建报告
SELECT requester, :APP_USER from "TaskAssignment"
并检查输出。也许情况不匹配,你需要在等式的一边做 UPPER/LOWER 来解决这个问题?那取决于你。这是你的数据,你的数据库,由你来修复;)