Как я могу видеть данные в представлении Oracle, как я вижу их через приложение? - PullRequest
2 голосов
/ 04 мая 2010

Когда я перемещаюсь по приложению Oracle с моим пользователем приложения и с правильной ответственностью, я вижу данные.
Я использую меню «История записей», чтобы увидеть, какая таблица / представление используется приложением.
Итак, я получил PA_EXPEND_ITEMS_ADJUST2_V.

Когда я подключаюсь к пользователю apps в сеансе sqlplus,

SELECT * FROM PA_EXPEND_ITEMS_ADJUST2_V

дает мне 0 строк.

Я думаю, что-то неправильно сконфигурировано с apps, но что?

Как можно просмотреть строки PA_EXPEND_ITEMS_ADJUST2_V, используя apps пользователя в сеансе sqlplus?

Как я могу видеть данные в представлении Oracle, как будто я вижу их через приложение?

Ответы [ 4 ]

2 голосов
/ 04 мая 2010

Вероятно, здесь происходит некоторая защита на уровне строк.Возможно, на основе представлений, возможно, встроенного RLS / FGAC / VPD (или любой другой аббревиатуры, которую они дают с этой версией).Вот где база данных переписывает запрос за кулисами, чтобы добавить фильтры.

Обычно они основаны на значениях SYS_CONTEXT.

1 голос
/ 04 мая 2010

В приложениях 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;
/
1 голос
/ 04 мая 2010

Вам нужно будет войти в Oracle с тем же пользователем (или пользователем с теми же правами / ролями), что и приложение, которое используется.

Вам нужно поговорить с вашим администратором базы данных.

0 голосов
/ 04 мая 2010

Другая возможность (помимо защиты на уровне строк, которая может быть задействована) заключается в том, что представление основано на одной или нескольких глобальных временных таблицах - это означает, что вы не увидите данные, если не выполните запрос из того же сеанса, вставляет его.

Или, возможно, приложение удаляет данные после того, как с ним покончено;)

...