根据当前登录的用户过滤记录

问题描述 投票:0回答:2

我在 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
 

但只显示了第一列:

我该怎么做才能解决这个问题?

oracle where-clause filtering oracle-apex
2个回答
2
投票

我不使用 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.

2
投票

在任何顶点会话中,当前用户的值存储在绑定变量中

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 来解决这个问题?那取决于你。这是你的数据,你的数据库,由你来修复;)

© www.soinside.com 2019 - 2024. All rights reserved.