APEX - 将值与当前用户ID进行比较

时间:2015-12-06 16:14:18

标签: sql database oracle oracle-apex

我尝试创建一个报告,根据用户ID显示过滤后的信息。讲师将能够登录系统,并将看到他们所领导的所有模块,登录ID与用于在模块表中定义讲师代码的讲师代码相同。

这是我的SQL查询。

SELECT m.module_code, m.module_name, m.lecturer_code, 
m.module_number_assessments, m.module_moderator FROM module m, lecturer l 
WHERE m.lecturer_code = [Select l.lecturer_code from lecturer l where 
l.lecturer_code = UserInfo.getUserId()];

我收到以下错误"无法解析查询,请检查查询的语法。 (ORA-00936:缺少表达)"当试图将其用作报告的来源时。

我是APEX的新手。有关此代码无效的任何想法吗?

4 个答案:

答案 0 :(得分:2)

在Apex中,您使用:APP_USER检索用户。此绑定变量包含用户登录到应用程序时使用的值(因此登录页面上的:P101_USERNAME的值)。

如果您需要实际ID或与用户相关的任何其他相关信息,您应该创建一些应用程序项来存储该信息。在身份验证方案的后验证过程中,您可以根据使用的登录名将值检索到应用程序项中。

答案 1 :(得分:1)

如果我理解你的意图,那么正确的SQL就是:

SELECT m.module_code, m.module_name, m.lecturer_code, 
      m.module_number_assessments, m.module_moderator
FROM module m JOIN
     lecturer l 
     ON m.lecturer_code = l.lecturer_code
WHERE l.lecturer_code = UserInfo.getUserId();

UserInfo.getUserId()不是Oracle的标准部分(据我所知)。您可以使用USER或类似函数来获取数据库中的用户标识。获取系统信息的一般功能是SYS_CONTEXT(),记录为here。您可能想要“SYSTEM_USER”:SYS_CONTEXT('USERENV', 'SESSION_USER')

在您的情况下,您可能只想要EXISTS

SELECT m.*
FROM module m
WHERE EXISTS (SELECT 1
              FROM lecture l
              WHERE m.lecturer_code = l.lecturer_code AND
                    l.lecturer_code = UserInfo.getUserId()
             );

这些都没有解决Oracle无法理解UserInfo.getUserId()的问题。

答案 2 :(得分:1)

使用包创建页面流程:

  declare
        v varchar2(255) := null;
        c owa_cookie.cookie;
    begin
       c := owa_cookie.get('LOGIN_USERNAME_COOKIE');
       :P1_USERNAME := c.vals(1);
    exception when others then null;
    end;

Reference

根据上述获取用户名的程序,您可以编写如下查询:

SELECT m.module_code, m.module_name, m.lecturer_code, 
m.module_number_assessments, m.module_moderator FROM module m, lecturer l 
WHERE m.lecturer_code = (Select l.lecturer_code from lecturer l where 
l.lecturer_code = :P1_USERNAME);
  

在数据库表中对演示代码进行适当的更改   与用户名相比

答案 3 :(得分:0)

据我所知,没有任何类似于顶点中UserInfo.getUserId()的代码

在我的代码中,我使用apex cookie获取loggined用户的用户名然后查找id我在代码中使用类似于下面的代码 适应你可以使用如下

l.lecturer_code = (select USER_ID from USERS_TABLE where USER_USERNAME=apex_authentication.get_login_username_cookie)