powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема передачи структуры из Oracle в Java
7 сообщений из 7, страница 1 из 1
Проблема передачи структуры из Oracle в Java
    #39804613
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникла такая вот проблема
Oracle 9i
Это создание типа объекта для передачи структуры
Код: plsql
1.
2.
3.
4.
5.
6.
7.
create or replace 
   type TOBJRESULT as 
        object (code varchar2(20)
              , message varchar2(4000)
              , num     integer
              , CONSTRUCTOR FUNCTION TOBJRESULT RETURN SELF AS RESULT              
              )




Это создание самого объекта со структурой

Код: plsql
1.
2.
3.
4.
5.
6.
7.
function getResult return TObjResult
is
o#result TObjResult; -- := TObjResult();
begin 
  o#result                := TObjResult('321', '123456', 344654);
 return o#result;
end;    



Это код в Java

Код: java
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleTypes;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;



        OracleConnection conn = null;
        //Connection conn = null;
        
        CallableStatement stmt = null;

        
        
        try {
            
            conn = jdbcUtils.getConnection();
            
            StructDescriptor structDesc = StructDescriptor.createDescriptor("TOBJRESULT", conn);
            
            OracleCallableStatement cst = (OracleCallableStatement) conn.prepareCall(
                "{call ? := result.getResul}"
            );            
            
            //cst.setSTRUCT(1, struct);
            cst.registerOutParameter(1, OracleTypes.STRUCT, "TOBJRESULT");
            
            cst.execute();
            
            STRUCT struct = cst.getSTRUCT(1);
            
            Object[] rec = struct.getAttributes();
            
            
            for (int i = 0 ; i< rec.length; i++){
                logger.debug("i=%s, type=%s, value=%s", i, rec[i].getClass().getName(), rec[i] );
            }
            
            retCode     = (String)rec[0];
            retMessage  = Tools.fromBase((String)rec[1]);




        }catch(SQLException e){    
            retCode = Integer.toString(e.getErrorCode());
            retMessage = e.getMessage();
            throw e;
        } finally {
          if (stmt != null )   stmt.close();
          if (conn != null)    conn.close();
        }



Проблема в том, что возвращает эта структура.

Код: plaintext
1.
2.
3.
INFO  2019-04-22 08:49:52,946 -  i=0, type=java.lang.String, value=???
INFO  2019-04-22 08:49:52,946 -  i=1, type=java.lang.String, value=???
INFO  2019-04-22 08:49:52,946 -  i=2, type=java.math.BigDecimal, value=9876543210

Специально передавал цифры, чтобы не было претензий к кодировке.

Что я не так сделал?

И еще вопрос, как сделать так, чтобы можно было обращаться к атрибутам структуры по имени атрибута?

Спасибо.
...
Рейтинг: 0 / 0
Проблема передачи структуры из Oracle в Java
    #39804617
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKaСпециально передавал цифрывыведенное джавой число достаточно специфичное, чтобы быть искажением чего-то другого.
...
Рейтинг: 0 / 0
Проблема передачи структуры из Oracle в Java
    #39804628
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как оказалось, это проблема работы со структурой в вебсервисе.
Сервер Glassfish
используемые библиотеки
ojdbc6.jar
ojdbc6_g.jar


Сделал обычное явовское приложение, все возвращается как надо.
...
Рейтинг: 0 / 0
Проблема передачи структуры из Oracle в Java
    #39804629
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге проблема решилась
Подложил рыбе еще и orai18n.jar и все заработало.
...
Рейтинг: 0 / 0
Проблема передачи структуры из Oracle в Java
    #39804633
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Остался один вопрос. Как обратиться к атрибуту из структуры по имени атрибута, а не по его индексу в массиве?
...
Рейтинг: 0 / 0
Проблема передачи структуры из Oracle в Java
    #39804891
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проблема передачи структуры из Oracle в Java
    #39804907
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevJPublisher ?

https://docs.oracle.com/database/121/JJPUB/intro.htm#JJPUB24021

New Features in Oracle Database 12c Release 1(12.1.0.2) JPublisher



У нас Oracle 9i
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема передачи структуры из Oracle в Java
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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