代码之家  ›  专栏  ›  技术社区  ›  Luc M

如何在Oracle视图中查看数据,就像通过应用程序查看数据一样?

  •  2
  • Luc M  · 技术社区  · 14 年前

    当我带着我的应用程序用户和正确的职责浏览Oracle应用程序时,我看到了数据。
    我使用“记录历史”菜单查看应用程序使用的表/视图。
    所以,我得到了 PA_EXPEND_ITEMS_ADJUST2_V .

    当我与 apps sqlplus会话中的用户,

    SELECT * FROM PA_EXPEND_ITEMS_ADJUST2_V
    

    给我0行。

    我想有些东西配置错误 应用程序 但是什么?

    我如何查看使用的支出项目调整行 应用程序 用户在sqlplus会话中?

    如何在Oracle视图中查看数据,就像通过应用程序查看数据一样?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Vincent Malgrat    14 年前

    在Oracle应用程序中,必须执行 APPS.FND_GLOBAL.apps_initialize 过程在SQL*PLUS会话中具有相同的上下文。我使用以下脚本启动会话:

    SET SERVEROUTPUT ON
    DECLARE
       l_user_id   NUMBER;
       l_resp_id   NUMBER;
       l_app_id    NUMBER;
       l_resp_name VARCHAR2(100) := '<Name of your responsibility>';
       l_login VARCHAR2(30) := '<USERLOGIN>'
    BEGIN
       SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name = l_login;
       SELECT application_id, responsibility_id
         INTO l_app_id, l_resp_id
         FROM fnd_responsibility_vl
        WHERE responsibility_name = l_resp_name;
       apps.fnd_global.apps_initialize(l_user_id, l_resp_id, l_app_id);
       dbms_output.put_line('l_user_id = '||l_user_id);
       dbms_output.put_line('l_resp_id = '||l_resp_id);
       dbms_output.put_line('l_app_id = '||l_app_id);
    END;
    /
    
        2
  •  2
  •   Gary Myers    14 年前

    这里可能发生了一些行级安全问题。可能基于视图,也可能是内置的rls/fgac/vpd(或者他们在该版本中给出的任何缩写)。这就是数据库在后台重写查询以添加过滤器的地方。

    通常基于系统上下文值。

        3
  •  1
  •   Matthew Watson    14 年前

    您需要使用与应用程序所使用的相同用户(或具有相同权限/角色的用户)登录到Oracle。

    你需要和你的DBA谈谈。

        4
  •  0
  •   Jeffrey Kemp    14 年前

    另一种可能性(除了可能涉及的行级安全性)是,该视图基于一个或多个全局临时表,这意味着除非在插入数据的同一会话中进行查询,否则将看不到数据。

    或者,应用程序可能在完成数据后删除数据;)