Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение выходных параметров процедуры / 14 сообщений из 14, страница 1 из 1
01.07.2012, 16:39:02
    #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
01.07.2012, 19:43:03
    #37862141
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
Roman46,
если у вас не абстрактный пример, то в общем случае:
- EXECUTE IMMEDIATE не есть хорошо
http://www.sql.ru/forum/actualthread.aspx?tid=134158
- переделайте ХП на выход стандартных типов. Тем более, что у вас процедура не требуют пользовательского типа.
IMHO
Java предназначен как можно больше стандартизировать работу с БД, хотя можно поискать ответ на ваш вопрос более конкретно))
...
Рейтинг: 0 / 0
01.07.2012, 19:48:33
    #37862147
Roman46
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
Petro123,
Мне бы именно ответ на мой вопрос
...
Рейтинг: 0 / 0
01.07.2012, 20:17:07
    #37862168
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
Roman46Petro123,
Мне бы именно ответ на мой вопрос
максимум, не усложняя
FAQ
Java & Oracle, передача-прием массивов.
http://www.sql.ru/faq/faq_topic.aspx?fid=407
Удачи!
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
02.07.2012, 10:30:57
    #37862466
scott-tiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
вдруг поможет -
а что если тип создавать не в пакете, а глобально:
CREATE OR REPLACE TYPE...
...
Рейтинг: 0 / 0
02.07.2012, 10:38:33
    #37862485
Roman46
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
scott-tiger,
Пробовал sqldeveloper выкидывает ошибку
...
Рейтинг: 0 / 0
02.07.2012, 10:40:20
    #37862489
scott-tiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
Roman46,

при создании типа?
какая ORA?
...
Рейтинг: 0 / 0
02.07.2012, 10:46:07
    #37862504
Roman46
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
scott-tiger,
Чуть по позже напишу сижу за компом который весь забит хламом и на нем нет sqldevelopera
...
Рейтинг: 0 / 0
02.07.2012, 10:56:16
    #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
02.07.2012, 10:59:55
    #37862533
Roman46
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
Petro123,
Код: plsql
1.
CREATE OR REPLACE TYPE user_type IS TABLE OF MC_USERS%ROWTYPE;


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



Вот на такую запись sqldeveloper выкидывает ошибку вчера пробовал. Код ошибки щас не могу привести сижу за забитым компом без sqldeveloper
это ошибка о том что старый тип сидит. Удали их оба руками.
...
Рейтинг: 0 / 0
02.07.2012, 13:46:33
    #37862910
proxy1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
...
Рейтинг: 0 / 0
02.07.2012, 23:03:38
    #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
02.07.2012, 23:57:46
    #37863739
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение выходных параметров процедуры
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение выходных параметров процедуры / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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