当我与我的应用程序用户一起浏览Oracle应用程序并且有正确的责任时,我会看到数据
我使用“记录历史”菜单查看应用程序使用的表/视图
所以,我得到PA_EXPEND_ITEMS_ADJUST2_V
。
当我在sqlplus会话中与apps
用户连接时,
SELECT * FROM PA_EXPEND_ITEMS_ADJUST2_V
给了我0行。
我猜有些东西与apps
有误配置,但是什么?
如何在sqlplus会话中使用apps
用户查看PA_EXPEND_ITEMS_ADJUST2_V的行?
如何通过应用程序看到Oracle视图中的数据?
答案 0 :(得分:2)
这里可能发生了一些行级安全问题。可能基于视图,可能是内置的RLS / FGAC / VPD(或者他们用该版本提供的任何首字母缩略词)。这就是数据库在幕后重写查询以添加过滤器的地方。
通常基于SYS_CONTEXT值。
答案 1 :(得分:1)
您需要使用与应用程序使用的用户相同的用户(或具有相同权限/角色的用户)登录oracle。
您需要与您的DBA交谈。
答案 2 :(得分:1)
在Oracle Applications中,您必须执行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;
/
答案 3 :(得分:0)
另一种可能性(除了可能涉及的行级安全性)是视图基于一个或多个全局临时表 - 这意味着除非您在同一会话中查询,否则您将看不到数据插入它。
或许,应用程序在完成后删除数据;)