powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / java ARRAY -> oracle
25 сообщений из 26, страница 1 из 2
java ARRAY -> oracle
    #38995941
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Требуется помощь зала...
Прочитал все здесь по этой теме.
Но ответа на свою проблему не нашел.

Есть два экземпляра oracle 10.2.0.5
На одном все работает как часы.
На другом кроме Date все остальные значения на стороне базы получаю как null....

java 7 .79 тонкий драйвер оракла ojdbc6.jar от oracle 11.2

Использовал варианты передачи
- набор одноразмерных массивов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
         create TYPE T_Date as table of date;
         create TYPE T_Number as table of number;
         create TYPE T_VCH2_100 as table of VARCHAR2(100);

CREATE OR REPLACE procedure load_file_full (
        --
        a_MSISDN              in  T_VCH2_100,
        a_MNC                   in T_VCH2_100,
        a_OperatorID          in  T_VCH2_100,
        a_RegionID             in T_VCH2_100,
        a_RN                    in  T_VCH2_100,
        a_PortDate            in  T_Date
    ) 
...



пытался через объекты (структуры)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  CREATE OR REPLACE TYPE T_MNPTRANSFER_FULL as object (
     MSISDN      VARCHAR2(22),
     MNC         VARCHAR2(10),
     OPERATORID  VARCHAR2(200),
     RN          VARCHAR2(10),
     REGIONID    VARCHAR2(10),
     PORTDATE    DATE
);
CREATE OR REPLACE TYPE TT_MNPTRANSFER_FULL as table of T_MNPTRANSFER_FULL;

CREATE OR REPLACE procedure load_file_full_o (
        --
        tbl_full                  in TT_MNPTRANSFER_FULL
    )
    ....



пытался и через VARRAY

результат один - на одном сервере все OK на втором кроме дат все остальное = null.

основные части 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.
            String[]            a_MSISDN        = new String[size];
            String[]            a_MNC           = new String[size];
            String[]            a_OperatorID    = new String[size];
            String[]            a_RegionID      = new String[size];
            String[]            a_RN            = new String[size];
            Timestamp[]         a_PortDate     = new Timestamp[size];

            int i = -1;
            for (Item object : items) {
                i++;
                a_MSISDN[i]     = object.MSISDN;
                a_MNC[i]        = object.MNC;
                a_OperatorID[i] = object.OperatorID;
                a_RegionID[i]   = object.RegionID;
                a_RN[i]         = object.RN;
                a_PortDate[i]   = new Timestamp(object.PortDate.getTime());
            }

            ARRAY aa_MSISDN         = ((oracle.jdbc.OracleConnection)cn).createARRAY("T_VCH2_100",a_MSISDN);
            ARRAY aa_MNC            = ((oracle.jdbc.OracleConnection)cn).createARRAY("T_VCH2_100",a_MNC);
            ARRAY aa_OperatorID     = ((oracle.jdbc.OracleConnection)cn).createARRAY("T_VCH2_100",a_OperatorID);
            ARRAY aa_RegionID       = ((oracle.jdbc.OracleConnection)cn).createARRAY("T_VCH2_100",a_RegionID);
            ARRAY aa_RN             = ((oracle.jdbc.OracleConnection)cn).createARRAY("T_VCH2_100",a_RN);
            ARRAY aa_PortDate      = ((oracle.jdbc.OracleConnection)cn).createARRAY("T_DATE",a_PortDate);

            String sql_write_tmp = "begin load_file_full(?,?,?,?,?,?); end;";
            cs = cn.prepareCall(sql_write_tmp);

            ((OracleCallableStatement)cs).setARRAY(1,aa_MSISDN);
            ((OracleCallableStatement)cs).setARRAY(2,aa_MNC);
            ((OracleCallableStatement)cs).setARRAY(3,aa_OperatorID);
            ((OracleCallableStatement)cs).setARRAY(4,aa_RegionID);
            ((OracleCallableStatement)cs).setARRAY(5,aa_RN);
            ((OracleCallableStatement)cs).setARRAY(6,aa_PortDate);

            cs.execute();



для варианта через массивы объектов
Код: 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.
        StructDescriptor structDesc = null;
        ArrayDescriptor arrayDesc = null;
        structDesc = StructDescriptor.createDescriptor("T_MNPTRANSFER_FULL", cn);
        arrayDesc = ArrayDescriptor.createDescriptor("TT_MNPTRANSFER_FULL", cn);

        ArrayList pArrayList = new ArrayList();

        Object[] pRecord = new Object[6];
        for (Item object : items) {
            pRecord[0]      = object.MSISDN;
            pRecord[1]      = object.MNC;
            pRecord[2]      = object.OperatorID;
            pRecord[3]      = object.RN;
            pRecord[4]      = object.RegionID;
            pRecord[5]      = new Timestamp(object.PortDate.getTime());
            pArrayList.add(new STRUCT(structDesc, cn, pRecord));
        }
        ARRAY pARRAY = new ARRAY(arrayDesc, cn, pArrayList.toArray());
        String sql_write_tmp = "begin load_file_full_o(?); end;";
        CallableStatement cs = null;

        try{
            cs = cn.prepareCall(sql_write_tmp);
            ((OracleCallableStatement)cs).setARRAY(1,pARRAY);
            cs.execute();
        }finally {
            DBHelper.release(cs);
        }



вариант для varray аналогичен варианту с одноразмерными массивами, только в оракловую процедуру передаю еще один праметр - кол-во заполненных элементов. т.ч. я этот вариант здесь не привожу...

допускаю, что дело не в самих массивах, а в чем то еще.
Куда копать ?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38995969
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добавлю, чтобы не было сомнений - через обычный insert все работает. т.ч. данные посылаются не null.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996014
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor-65Есть два экземпляра oracle 10.2.0.5
На одном все работает как часы.


Дело в конфе второго экземпляра Оракла?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996047
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Позволю себе предположить, что, может быть, дело в VARCHAR2 и в размерности, которая указывается либо в byte, либо в char, и в параметре NLS_LENGTH_SEMANTICS, который меняет the default behavior from BYTE to CHAR. Может, поэтому текст не помещается и остается null.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996053
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там, где помещается, char
а где не помешается byte
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996120
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо, не в этом дело. MSISDN и MNC - это точно цифры.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996139
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже я это уже где-то видел:

http://www.sql.ru/forum/1074235/oracle-plsql-vozvrat-table-of?hl=java array
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996187
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное, надо взять какого-нибудь другого клиента (например, PL/SQL Developer) и потестировать хранимку, если есть подозрения, что дело не в сервере, а в клиенте.
Хотя автор темы пишет, что с его клиентом один сервер работает, а другой - нет. И что insert, как я поняла, в обоих случаях срабатывает нормально.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996314
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там все либо цифры либо латиница ...
и опять таки.. да простой insert работает ...
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996316
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor-65, сама хранимка рабочая? Без Java кода. С любым сервером работает?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996318
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevПохоже я это уже где-то видел:

http://www.sql.ru/forum/1074235/oracle-plsql-vozvrat-table-of?hl=java array
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996322
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor-65Leonid KudryavtsevПохоже я это уже где-то видел:

http://www.sql.ru/forum/1074235/oracle-plsql-vozvrat-table-of?hl=java array

промахнулся ...
Леонид,
в ветке, на которую ты отправляешь проблема с кодировкой..
Данные там передавались.
У меня же передаются не null, а приходят null...
Все, кроме даты.

В другом наборе есть и number. Но тоже приходит null.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996332
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenaIgor-65, сама хранимка рабочая? Без Java кода. С любым сервером работает?

Лена, я не понял вопроса.

Если речь о процедуре, то проверка на null сразу дает exception на "плохом" сервере.

Код: 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.
27.
28.
29.
30.
31.
32.
33.
CREATE OR REPLACE procedure load_file_full (
        --
        a_MSISDN              in  T_VCH2_100,
        a_MNC                 in  T_VCH2_100,
        a_OperatorID          in  T_VCH2_100,
        a_RegionID            in  T_VCH2_100,
        a_RN                  in  T_VCH2_100,
        a_PortDate            in  T_Date
    )
    is
    begin
       if (a_MSISDN.count > 0) then  
          
           if a_MSISDN(1) is null then
              raise_application_error(-20001,'NULL !!!');
           end if;

               forall    i   in    a_MSISDN.first .. a_MSISDN.last
                  insert /* APPEND */ 
                  into TMP_MNPTRANSFER_FULL
                  (MSISDN, MNC, OPERATORID, REGIONID, RN, PortDate)
                  values
                  (
                        a_MSISDN(i),
                        a_MNC(i),
                        a_OperatorID(i),
                        a_RegionID(i),
                        a_RN(i),
                        a_PortDate(i)
                  )
                  ;
       end if;
    end;



все остальное на этом сервере работает замечательно.
все, что писано на c с использованием proc c (загрузка данных) c использованием массивов работает нормально.
передача коллекций между процедурами внурти данного "плохого" инстанса также работает номально.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996336
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor-65, а я не понимаю, почему вы меня не понимаете. Обычно, прежде чем обращаться к хранимке из своего Java кода, хранимку тестируют в среде, в которой она разрабатывалась. Вот хоть PL/SQL Developer не на Java написан. Я хочу понять, где проблема. Если с этого клиента запрос дойдет до хранимки на любом сервере и нормально выполнится, то проблема клиента, написанного на Java.
Тогда можно взять другого клиента - SQL Developer - он написан на Java. И если из него запрос дойдет до хранимки и нормально выполнится, то проблема уже у вашего клиента и что-то с драйвером.

Так понятнее?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996390
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-65,

Leonid дал возможно решение,так orai18n.jar есть в classpath?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996428
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FDIgor-65,

Leonid дал возможно решение,так orai18n.jar есть в classpath?

я использую дрова от 11. смотри первое письмо.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996433
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenaIgor-65, а я не понимаю, почему вы меня не понимаете. Обычно, прежде чем обращаться к хранимке из своего Java кода, хранимку тестируют в среде, в которой она разрабатывалась. Вот хоть PL/SQL Developer не на Java написан. Я хочу понять, где проблема. Если с этого клиента запрос дойдет до хранимки на любом сервере и нормально выполнится, то проблема клиента, написанного на Java.
Тогда можно взять другого клиента - SQL Developer - он написан на Java. И если из него запрос дойдет до хранимки и нормально выполнится, то проблема уже у вашего клиента и что-то с драйвером.

Так понятнее?

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

доп инфа: я дезинформировал. number передается нормально.
осталась проблема с varchar2.

причем, при использовании в качестве клиента другой сервер и java 6 (7-ка там не уживается) результат аналогичен.
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996489
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-650FDIgor-65,

Leonid дал возможно решение,так orai18n.jar есть в classpath?

я использую дрова от 11. смотри первое письмо.

А что значит: я использую дрова от 11? Это только ojdbc6.jar или ojdbc6.jar и orai18n.jar всегда? Где у вас написано?
Так orai18n.jar есть в classpath?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38996514
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-65Есть два экземпляра oracle 10.2.0.5

А Oracle прям Oracle Database или Oracle XE?
А на втором сервере точно нет другой процедуры с таким же именем?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38997002
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FDIgor-65пропущено...


я использую дрова от 11. смотри первое письмо.

А что значит: я использую дрова от 11? Это только ojdbc6.jar или ojdbc6.jar и orai18n.jar всегда? Где у вас написано?
Так orai18n.jar есть в classpath?

а есть ли orai18n.jar в составе библиотек 11 клиента ?
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38997007
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38997035
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-65,

или в jlib клиента oracle
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38997039
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GarrickIgor-65Есть два экземпляра oracle 10.2.0.5

А Oracle прям Oracle Database или Oracle XE?
А на втором сервере точно нет другой процедуры с таким же именем?

"прям Oracle Database"
нет другой процедуры
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38997662
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenaIgor-65, http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html

:) вот где собака порылась... странно, что эту jar-ку в установленном у меня клиенте я нашел в /jlib а не в /jdbc
считал, что это "спрятано" в ojdbc6.jar.

когда использовал клиента от 10-ки и ниже - то это все лежало, вроде в /jdbc. Но могу и ошибаться..

Лена, спасибо !
0FD : мои извинения !

Вечером попробую подцепить...
...
Рейтинг: 0 / 0
java ARRAY -> oracle
    #38997749
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почитал внимательней по поводу orai18n.jar
" It contains classes for NLS support in Oracle Object and Collection types."
тогда не удивительно, что не проходило...
Вечером проверю. Но уже уверен, что все будет в порядке :)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / java ARRAY -> oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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