Строка, возвращенная из хранимой процедуры oracle в Java с '???' - PullRequest
1 голос
/ 30 ноября 2011

Мой код в Java вызывает хранимую процедуру в Oracle DB и возвращает объект с некоторыми полями. Когда я узнаю атрибуты из объекта - у меня проблема со строкой. Строка становится '???' (3 знака квеста) и это не должно быть! (целое число возвращено в порядке)

Я протестировал свою хранимую процедуру на БД - она ​​хорошо работала.

Я протестировал свой Java-код с помощью небольшой локальной основной программы, которая обращается к БД - и она работала хорошо. (Соединение с БД было прямым с DriverManager.getConnection ("jdbc: oracle: thin: @ ......);)

Проблема возникла, когда я использовал свою процедуру хранения в своем большом проекте, который подключается к БД через weblogic.

Знаете ли вы, как получить правильную строку из БД, когда я работаю с WebLogic?

Код Oracle:

  PROCEDURE SearchOrder (InWoArr IN WoTab,
                     OutWoAccStat OUT WoAccStatTab) as
  outRec WoAccStatType;
  wo number(10);
  acc number(10);
  stat varchar2(2);
  begin
  OutWoAccStat := WoAccStatTab();
    for i in InWoArr.FIRST .. InWoArr.LAST loop
    OutWoAccStat.EXTEND;
      begin
       select work_order_number,account_number,' '
    into wo,acc,stat
    from table1
    where work_order_number=InWoArr(i);
    ....
    outRec := WoAccStatType(wo,acc,stat);
    OutWoAccStat(i) := outRec;
  exception
    when no_data_found then
      outRec := WoAccStatType(InWoArr(i),0,' ');
      OutWoAccStat(i) := outRec;
  end;
end loop;
end SearchOrder;

// Массив 200

create or replace type poldev_dba.WoAccStatTab as VARRAY(200) of WoAccStatType

// Тип массива

create or replace type poldev_dba.WoAccStatType as object (work_order_number number(10), account_number number(10), wo_status varchar2(2))

// Java-код:

              //Store Procedure Name
          CallableStatement cs = (CallableStatement) con.prepareCall("{ call spp.SearchOrder( ?, ? )}");                                                                                    

          //input:
          cs.setArray(1,woInput);

          //Output:
          cs.registerOutParameter(2,OracleTypes.ARRAY,"WOACCSTATTAB");

          //Run the query...
          cs.execute();

          //Retrieve Array:
          woAccArray = (ARRAY)cs.getArray(2);
          woAccRecs = (Object[])woAccArray.getArray();

          int wo = 0;
          int acc = 0;
          String stat;

          for (int i = 0; i < woAccRecs.length; i++) {
              /* Since we don't know the type of the record, get it into STRUCT !! */
              STRUCT woAccRec = (oracle.sql.STRUCT)woAccRecs[i];
              /* Get the attributes - nothing but the columns of the table */
              Object[] attributes = woAccRec.getAttributes();

              /* attribute 0 - work order */
              wo = Integer.parseInt("" + attributes[0]);

              /* attribute 1 - account number */
              acc = Integer.parseInt("" + attributes[1]);

              /* attribute 2 - status */
              stat = (String) attributes[2]; 
              /*PROBLEM!!!! stat returned value '???'*/

              System.out.println("wo = " + wo + ",acc = " + acc +", status = "+stat);

1 Ответ

0 голосов
/ 30 ноября 2011

Проблема в другом месте. Ни БД Oracle, ни драйвер БД не заменят столбец результатов на ???. Найдите в коде вашего продукта эту строку, чтобы понять, почему она используется.

...