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
Профи


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


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

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


Вступление в Клуб: 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 10:35    Ответить с цитатой
Полезность: Нет оценки
как оформлен теперь вызов процедуры из библиотеки в йава приложении ?
samsonbek
Участник


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 10:40    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
как оформлен теперь вызов процедуры из библиотеки в йава приложении ?


Код:

      Statement stmt = conn.createStatement();
      stmt.execute("Select ibs.executor.lock_open From dual");
       
      ResultSet rset = conn.createStatement().executeQuery("select * from ibs.VW_CRIT_TEST_VIEW");
      
      while ( rset.next() ) {
         System.out.println(rset.getString(3)+"\t"+rset.getString(4));
         count++;
      }
      
      CallableStatement proc2 = conn.prepareCall("{? = call IBS.Z$TEST_TEST_LIB.ADD(3, '333-333')}");
      // Register the type of the return value
      proc2.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
      //proc2.registerOutParameter(1, oracle.jdbc.OracleTypes.VARCHAR);
      proc2.execute();      

vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Фев 21, 2012 11:11    Ответить с цитатой
Полезность: 1
12:07:58 begin
12:07:58 IBS.Z$TEST_TEST_LIB.ADD(1,'test');
12:07:58 ...
12:07:58 PL/SQL block executed
12:07:58 **** SCRIPT ENDED 21-ôåâ-2012 12:07:58 ****


цитирую sql navigator

begin
IBS.Z$TEST_TEST_LIB.ADD(1,'test');
commit;
end;

цитирую пакет

package body Z$TEST_TEST_LIB is
--#section PUBLIC
--#section PRIVATE
--# 1,1
procedure ADD(N IN number,S IN varchar2) is
plp$RESULT_2 number;
plp$RESULT_1 PLS_INTEGER;
begin
--# 4,2
plp$RESULT_1 := EXECUTOR.LOCK_OPEN;
plp$RESULT_2 := Z$TEST_NEW_AUTO.NEW_AUTO_EXECUTE(NULL,'TEST',N,S);
EXECUTOR.LOCK_CLOSE;
return;
end;
end Z$TEST_TEST_LIB;

цитирую PL +

procedure add( n number, s varchar(32000)) is
x integer;
begin
executor.lock_open;
::[TEST].new_auto( n, s);
executor.lock_close;
end;
samsonbek
Участник


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 13:08    Ответить с цитатой
Полезность: Нет оценки
херррня какая-то блин Evil or Very Mad
делаю exec IBS.Z$TEST1_TEST_LIB.ADD(4, '444-444');
через PL/SQL Developer
поначалу не работало, потом на 6 или 7 раз вдруг сработало, я аж сам не поверил, перезашёл, запускаю тоже самое, опять не работает.
Вообще в никакую не видит пакет, ругается что его надо объявить и все Question Question Question
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Фев 21, 2012 13:48    Ответить с цитатой
Полезность: Нет оценки
в ЦФТ в "глобальных описаниях" пакета
процедурку объявили ?

procedure add( n number, s varchar(32000));

на пакет какие - то права надо раздать. Откуда запускаете
тест, в том софте пакет видно Smile ?
samsonbek
Участник


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 13:56    Ответить с цитатой
Полезность: Нет оценки
в глобальных объявление процедуры add есть.

на пакет права через АРМ "Админ. доступа" раздавал.

Мне кажется что контекст не заполняется что-ли... Иначе почему бы пользователь ни видел тот пакет, который в навигаторе видит?

Или может еще что-нибудь помимо executor.lock_open нужно делать?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Фев 21, 2012 13:58    Ответить с цитатой
Полезность: Нет оценки
в PL/SQL Developer пакет видно (тело, спецификацию) ?
samsonbek
Участник


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 14:06    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
в PL/SQL Developer пакет видно (тело, спецификацию) ?


нет, не видно Sad
samsonbek
Участник


Вступление в Клуб: 25.03.2011
СообщениеВт Фев 21, 2012 14:12    Ответить с цитатой
Полезность: Нет оценки
Там вообще только интерфейсные пакеты видно
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Фев 21, 2012 14:18    Ответить с цитатой
Полезность: Нет оценки
надо взять портвейн и договориться с админом Oracle чтобы выдал права на пакет тому юзеру под кем выполняется PL/SQL Dev.. Я на вашем скриншоте пакет Z$TEST не наблюдаю.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru