Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC вызов функции другой схемы / 8 сообщений из 8, страница 1 из 1
26.03.2007, 14:07:20
    #34415601
yanich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Доброго времени суток...
Сразу прошу прощения за глупый вопрос - но не догоню, как вызвать процедуру другого пользователя Oracle (гранты на execute своей роли дал).
То есть хочу следующее:
Код: plaintext
1.
cstmt = (OracleCallableStatement)conn.prepareCall("{ call ? :=HR.testFunc() }");
А вылетает ошибка:
Код: plaintext
1.
PLS- 00225 : subprogram or cursor 'HR' reference is out of scope
...
Рейтинг: 0 / 0
26.03.2007, 14:37:45
    #34415741
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// SQL92 syntax
CallableStatement cs1 = conn.prepareCall
( "{call proc (?,?)}" ) ; // stored proc
CallableStatement cs2 = conn.prepareCall
( "{? = call func (?,?)}" ) ; // stored func
// Oracle PL/SQL block syntax
CallableStatement cs3 = conn.prepareCall
( "begin proc (?,?); end;" ) ; // stored proc
CallableStatement cs4 = conn.prepareCall
( "begin ? := func(?,?); end;" ) ; // stored func
...
Рейтинг: 0 / 0
26.03.2007, 15:50:55
    #34416022
yanich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Может быть надо экранировать HR, но ни ', ни `, ни \" не помогают
...
Рейтинг: 0 / 0
26.03.2007, 15:59:55
    #34416065
max_from_sumy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
А какой точно запрос попадает в базу?
Попробуйте его руками выполнить, будет ли выполняться..
...
Рейтинг: 0 / 0
26.03.2007, 18:35:23
    #34416578
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
TIM@test>;drop user test cascade;

User dropped.

TIM@test>;create user test identified by test;

User created.

TIM@test>;grant create session to test;

Grant succeeded.

TIM@test>;create function hr return varchar2 is begin return null; end;
   2   /

Function created.

TIM@test>;create public synonym hr for hr;

Synonym created.

TIM@test>;grant execute on hr to test;

Grant succeeded.
Код: plaintext
1.
2.
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test", "test", "test");
//..
cstmt = conn.prepareCall("{call ?:= HR.test_fnc() }");
Код: plaintext
1.
2.
java.sql.SQLException: ORA- 06550 : Строка  1 , столбец  16 :
PLS- 00225 : ссылка на подпрограмму или курсор 'HR' вне области действия
ORA- 06550 : Строка  1 , столбец  7 :
...
Рейтинг: 0 / 0
26.03.2007, 18:44:12
    #34416590
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Либо используй точечную нотацию <имя_схемы>.<имя_объекта_в_схеме> либо синонимы своему пользователю сделай...
ключевые слова - create synonym - дальше в документации ищи...
...
Рейтинг: 0 / 0
26.03.2007, 21:43:16
    #34416855
yanich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Да, уже сам пришел к такому же решения с синонимами. Спасибо
...
Рейтинг: 0 / 0
29.03.2007, 20:39:39
    #34425951
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC вызов функции другой схемы
Timm
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
TIM@test>;drop user test cascade;

User dropped.

TIM@test>;create user test identified by test;

User created.

TIM@test>;grant create session to test;

Grant succeeded.

TIM@test>;create function hr return varchar2 is begin return null; end;
   2   /

Function created.

TIM@test>;create public synonym hr for hr;

Synonym created.

TIM@test>;grant execute on hr to test;

Grant succeeded.
Код: plaintext
1.
2.
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test", "test", "test");
//..
cstmt = conn.prepareCall("{call ?:= HR.test_fnc() }");
Код: plaintext
1.
2.
java.sql.SQLException: ORA- 06550 : Строка  1 , столбец  16 :
PLS- 00225 : ссылка на подпрограмму или курсор 'HR' вне области действия
ORA- 06550 : Строка  1 , столбец  7 :


Тов. Timm забыл прокомментировать свой пример - а именно, что в случае наличия в текущей схеме объекта с именем HR, именно он будет использован при разрешении имён. Т.е. фактически в данном примере сделана попытка вызвать метод test_fnc некоего объекта, возвращаемого созданной нами же функцией HR.
В общем это обычный конфликт имён - устранить и не понадобятся никакие синонимы.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC вызов функции другой схемы / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]