CftClub.ru
Клуб специалистов ЦФТ-Банк

доступ к операции из внешнего Java-приложения
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
samsonbek
Участник
Неподтвержденный


Вступление в Клуб: 25.03.2011
СообщениеПн Фев 20, 2012 21:41   доступ к операции из внешнего Java-приложения Ответить с цитатой
Полезность: Нет оценки
Проблема такая:
Нужно из java-приложения запустить операцию-констурктор в ИБСО.

Дано:
Пользователь с логином user1
Справочник z#test, владелец справочника IBS.
Операция-констурктор в этом справочнике z$test_new#auto.new#auto_execute(...).
Представление в этом справочнике vw_crit_test_full
В Навигаторе user1 имеет доступ к этой операции, отрабатывает нормально. К представлению доступ по реквизиту, тоже все работает.

Теперь что я делаю в java-приложении:
Создаю соединение с ИБСОм,
затем делаю select executor.lock_open from dual; // заполняю контекст сессии
Теперь обащаюсь к представлению select ibs.vw_crit_test_full - данные возвращяются, причем с ограничением по реквизиту, точно так же как и в навигаторе.
Теперь запускаю операцию-конструктор:
CallableStatement proc = conn.prepareCall("{? = call IBS.Z$TEST_NEW#AUTO.NEW#AUTO_EXECUTE(null, null, 3, '333-333')}");
proc.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
proc.execute();

Ошибка: ORA-06550: Строка 1, столбец 13:
PLS-00201: идентификатор 'IBS.Z$TEST_NEW#AUTO' должен быть объявлен
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored

Я так понимаю что несмотря на то что в Навигаторе user1 к этой операции доступ имеет, через оракл он ее не видит.

Если из java соединится под IBSом, то приведенный выше вызов отрабатывает.
Если помимо АРМа "Админ доступа" дать grant execute on z#test_new#auto to user1, то тоже будет работать.

Как сделать чтобы из java-приложения можно было запускать операцию, подскажите пожалуйста, умные люди.
Sad

PS. делал трассировку на вызов опреации в Навигаторе, из трассировки мало что понял, но как мне показалось, вызов операции в навигаторе не происходит напрямую, он идет через вызов интерфейсных пакетов???

PSofPS. В этой теме http://cftclub.ru/viewtopic.php?t=2054&highlight=executor кое-что описано, но мне это не помогло, больше похожих тем на сайте не обнаружил.
svn
Профи
<Банки (менее 3 участников)>


Вступление в Клуб: 04.02.2008
СообщениеВт Фев 21, 2012 09:40    Ответить с цитатой
Полезность: Нет оценки
добавите в Оракле своему пользователю роль IBS_USER
samsonbek
Участник
Неподтвержденный


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 09:52    Ответить с цитатой
Полезность: Нет оценки
svn пишет:
добавите в Оракле своему пользователю роль IBS_USER

не помогло Sad
та же самая ошибка выходит
PS. вобще, по идее эта роль у него уже есть...
svn
Профи
<Банки (менее 3 участников)>


Вступление в Клуб: 04.02.2008
СообщениеВт Фев 21, 2012 10:03    Ответить с цитатой
Полезность: Нет оценки
напишите библиотечную операцию - в ней функцию обертку под ваш вызов конструктора - там же можно прописать executor.lock_open в секции инициализации пакета
samsonbek
Участник
Неподтвержденный


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 10:30    Ответить с цитатой
Полезность: Нет оценки
svn пишет:
напишите библиотечную операцию - в ней функцию обертку под ваш вызов конструктора - там же можно прописать executor.lock_open в секции инициализации пакета


Написал, теперь библиотеку не может найти

ORA-06550: Строка 1, столбец 13:
PLS-00201: идентификатор 'IBS.Z$TEST_TEST_LIB' должен быть объявлен
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored


вот текст библиотеки:

package body Z$TEST_TEST_LIB is
--#section PUBLIC
--#section PRIVATE
--# 1,1
procedure ADD(N IN number,C IN varchar2) is
plp$RESULT_1 number;
begin
--# 3,5
plp$RESULT_1 := Z$TEST_NEW#AUTO.NEW#AUTO_EXECUTE(NULL,'TEST',N,C);
return;
end;
-- INITIALIZATION
begin
-- begin pl/sql
execute immediate 'select ibs.executor.lock_open() from dual';
-- end pl/sql
end Z$TEST_TEST_LIB;
vtar
Эксперт
Неподтвержденный


Вступление в Клуб: 20.03.2009
СообщениеВт Фев 21, 2012