Oracle: ошибка числа или значения - PullRequest
0 голосов
/ 23 ноября 2011

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

java.sql.SQLException: ORA-06502: PL / SQL: ошибка числа или значения:ошибка преобразования символа в число

if (rs.next()) {
                String originalOrderNature = rs.getString("ORDER_NATURE");
                String stExCode = rs.getString("ST_EX_CODE");
                long orderNumber = rs.getLong("ORDER_NUMBER");
                String client_code = rs.getString("CLIENT_CODE");
                String st_ex_code = rs.getString("ST_EX_CODE");
                String isin = rs.getString("ISIN");
                String symbol = rs.getString("SYMBOL");
                String market_type = rs.getString("MARKET_TYPE");
                String buy_or_sell = rs.getString("BUY_OR_SELL");
                int volume = rs.getInt("VOLUME");
                float rate_limit = rs.getFloat("RATE_LIMIT");
                String order_nature = rs.getString("ORDER_NATURE");
                Date valid_till = rs.getDate("VALID_TILL");
                String order_status_id = rs.getString("ORDER_STATUS_ID");
                aryMarginParam.add(0, originalOrderNature);
                aryMarginParam.add(1, stExCode);
                aryMarginParam.add(2, orderNumber);
                aryMarginParam.add(3, client_code);
                aryMarginParam.add(4, st_ex_code);
                aryMarginParam.add(5, isin);
                aryMarginParam.add(6, symbol);
                aryMarginParam.add(7, market_type);
                aryMarginParam.add(8, buy_or_sell);
                aryMarginParam.add(9, volume);
                aryMarginParam.add(10, rate_limit);
                aryMarginParam.add(11, order_nature);
                aryMarginParam.add(12, valid_till);
                aryMarginParam.add(13, order_status_id);
            }

В этой функции я передаю этот массив List

String statement = "BEGIN ? := abc(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?); END;";

    Object[] in = new Object[13];
    int[] out = new int[2];
    String OriginalOrderNature = (String) arrVerifyMargin.get(0);
    String stExCode = (String) arrVerifyMargin.get(1);
    long orderNumber = (Long) arrVerifyMargin.get(2);
    String client_code = (String) arrVerifyMargin.get(3);
    String st_ex_code = (String) arrVerifyMargin.get(4);
    String isin = (String) arrVerifyMargin.get(5);
    String symbol = (String) arrVerifyMargin.get(6);
    String market_type = (String) arrVerifyMargin.get(7);
    String buy_or_sell = (String) arrVerifyMargin.get(8);
    int volume = (Integer) arrVerifyMargin.get(9);
    float rate_limit = (Float) arrVerifyMargin.get(10);
    String order_nature = (String) arrVerifyMargin.get(11);
    Date valid_till = (Date) arrVerifyMargin.get(12);
    String order_status_id = (String) arrVerifyMargin.get(13);
    int modifyy = modify;   
    //float float_volume = (float)volume;
    System.out.println(OriginalOrderNature + " " + stExCode);

    out[0] = Types.VARCHAR;
    in[0] = orderNumber;
    in[1] = client_code;
    in[2] = st_ex_code;
    in[3] = isin;
    in[4] = symbol;
    in[5] = market_type;
    in[6] = buy_or_sell;
    in[7] = volume;
    in[8] = rate_limit;
    in[9] = order_nature;
    in[10] = valid_till;
    in[11] = order_status_id;
    in[12] = modifyy;
    out[1] = Types.VARCHAR;
    String orderNature = (DAOHelper.call(statement, in, out))[1].toString();
    return orderNature;

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011

Ошибка ясно говорит вам, в чем проблема. По некоторым причинам PL / SQL пытается преобразовать символьные данные в число, но не может.

Вам нужно поверить сообщению об ошибке и попытаться выяснить , почему проблема возникает; например что это за символы и почему они не конвертируются.

Я не эксперт по PL / SQL, но вам нужно учитывать такие вещи, как:

  • нечисловые символы в преобразуемой строке,
  • начальные или конечные пробелы,
  • внедренные ',' или подобные введенные пользователем,
  • ложная десятичная точка, если целевым типом является целое число
  • несколько десятичных знаков и т. Д., Если целевой тип является типом с плавающей запятой
  • слишком много входных цифр для размера целевого типа

Некоторые из них могут приводить к различным ошибкам, но, безусловно, случай, когда более чем один из приведенных выше может привести к этому сообщению об ошибке.

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

В этой строке:

String statement = "BEGIN ? := abc(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?); END;"; 

Нельзя использовать заполнитель (?) После BEGIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...