powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение выходных параметров процедуры
14 сообщений из 14, страница 1 из 1
Получение выходных параметров процедуры
    #37862055
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Ребят может кто-нибудь сталкивался с такой проблемой. Есть тип хранящийся в пакете и процедура которая использует этот тип:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE OR REPLACE PACKAGE return_types
IS
   TYPE user_type IS TABLE OF MC_USERS%ROWTYPE;
END return_types;

CREATE OR REPLACE PROCEDURE search_on_fields(object_id IN NUMBER, search_term IN VARCHAR2, list_users OUT return_types.user_type, list_folders OUT id_varray, list_letters OUT id_varray) 
IS
BEGIN
   BEGIN
      BEGIN
         EXECUTE IMMEDIATE 'SELECT object_id FROM MC_USERS WHERE object_id = :1'|| search_term ||'' BULK COLLECT INTO list_users USING object_id; 
      EXCEPTION
         WHEN OTHERS THEN NULL;
      END;
      BEGIN
         EXECUTE IMMEDIATE 'SELECT object_id FROM MC_FOLDERS WHERE createdBy = :1'|| search_term ||'' BULK COLLECT INTO list_folders USING object_id;
      EXCEPTION
         WHEN OTHERS THEN NULL;
      END;
      BEGIN
         EXECUTE IMMEDIATE 'SELECT DISTINCT(l.object_id) FROM MC_LETTERS l, MC_ATTACHMENTS a WHERE a.letter_id = l.object_id AND maker = :1'|| search_term ||'' BULK COLLECT INTO list_letters USING object_id;
      EXCEPTION 
         WHEN OTHERS THEN NULL;
      END;
   END;
END;



Как в программе java получить значение переменной использующей тип хранящийся в пакете. Попробовал так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
callableStatement = connection.prepareCall("{call search_on_fields(?, ?, ?, ?, ?)}");
        callableStatement.setLong(1, id.longValue());
        callableStatement.setString(2, search_term.toString());
        callableStatement.registerOutParameter(3, OracleTypes.ARRAY, "return_types.user_type");
        callableStatement.registerOutParameter(4, OracleTypes.ARRAY, "ID_VARRAY");
        callableStatement.registerOutParameter(5, OracleTypes.ARRAY, "ID_VARRAY");
        callableStatement.execute();
        Array array1 = callableStatement.getArray(3);
        Array array2 = callableStatement.getArray(4);
        Array array3 = callableStatement.getArray(5);



Получил ошибку:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
java.sql.SQLException: invalid name pattern: return_types.user_type
	at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:554)
	at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:470)
	at oracle.sql.ArrayDescriptor.initPickler(ArrayDescriptor.java:1649)
	at oracle.sql.ArrayDescriptor.<init>(ArrayDescriptor.java:298)
	at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:209)
	at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:178)
	at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:161)
	at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:128)
	at oracle.jdbc.driver.NamedTypeAccessor.otypeFromName(NamedTypeAccessor.java:82)
	at oracle.jdbc.driver.TypeAccessor.initMetadata(TypeAccessor.java:89)
	at oracle.jdbc.driver.T4CCallableStatement.allocateAccessor(T4CCallableStatement.java:691)
	at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:178)
	at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:223)
	at oracle.jdbc.driver.OracleCallableStatementWrapper.registerOutParameter(OracleCallableStatementWrapper.java:1584)
	at core.DataBaseDAO.searchOnFields(DataBaseDAO.java:322)
	at core.DataBaseDAO.search(DataBaseDAO.java:260)
	at core.dao.DataBaseDAOTest.testSearch(DataBaseDAOTest.java:160)
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862141
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman46,
если у вас не абстрактный пример, то в общем случае:
- EXECUTE IMMEDIATE не есть хорошо
http://www.sql.ru/forum/actualthread.aspx?tid=134158
- переделайте ХП на выход стандартных типов. Тем более, что у вас процедура не требуют пользовательского типа.
IMHO
Java предназначен как можно больше стандартизировать работу с БД, хотя можно поискать ответ на ваш вопрос более конкретно))
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862147
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Мне бы именно ответ на мой вопрос
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862168
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman46Petro123,
Мне бы именно ответ на мой вопрос
максимум, не усложняя
FAQ
Java & Oracle, передача-прием массивов.
http://www.sql.ru/faq/faq_topic.aspx?fid=407
Удачи!
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862466
scott-tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вдруг поможет -
а что если тип создавать не в пакете, а глобально:
CREATE OR REPLACE TYPE...
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862485
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scott-tiger,
Пробовал sqldeveloper выкидывает ошибку
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862489
scott-tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman46,

при создании типа?
какая ORA?
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862504
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scott-tiger,
Чуть по позже напишу сижу за компом который весь забит хламом и на нем нет sqldevelopera
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862526
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scott-tigerвдруг поможет -
а что если тип создавать не в пакете, а глобально:
CREATE OR REPLACE TYPE...
типы и должны быть глобальными на уровне всей СУБД

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE TYPE obj_a AS OBJECT
(
  s      VARCHAR2(500),
..........
)
/ 
CREATE OR REPLACE TYPE t_obj_a AS table OF obj_a;
/
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862533
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Код: plsql
1.
CREATE OR REPLACE TYPE user_type IS TABLE OF MC_USERS%ROWTYPE;


Вот на такую запись sqldeveloper выкидывает ошибку вчера пробовал. Код ошибки щас не могу привести сижу за забитым компом без sqldeveloper
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862538
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman46Petro123,
Код: plsql
1.
CREATE OR REPLACE TYPE user_type IS TABLE OF MC_USERS%ROWTYPE;



Вот на такую запись sqldeveloper выкидывает ошибку вчера пробовал. Код ошибки щас не могу привести сижу за забитым компом без sqldeveloper
это ошибка о том что старый тип сидит. Удали их оба руками.
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37862910
proxy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37863680
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что выдает sqldeveloper при создании таких типов

Код: plsql
1.
2.
CREATE OR REPLACE TYPE user_type AS TABLE OF MC_USERS%ROWTYPE;
CREATE OR REPLACE TYPE user_type IS TABLE OF MC_USERS%ROWTYPE;


Код: plsql
1.
2.
3.
4.
TYPE user_type compiled
Warning: execution completed with warning
TYPE user_type compiled
Warning: execution completed with warning
...
Рейтинг: 0 / 0
Получение выходных параметров процедуры
    #37863739
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение выходных параметров процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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