ORA-01858 Oracle Дата Проблема при вставке из Java - PullRequest
1 голос
/ 02 декабря 2010

В моем приложении есть код, который вставляет java.sql.Timestamp в столбец даты оракула. Этот код работает нормально. Но иногда я получаю сообщение об ошибке:

ORA-01858: a non-numeric character was found where a numeric was expected. 

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

Первый оператор не удался. Но второй успешно вставлен.

INSERT INTO OMTM_EXECUTE_REPORT(er_id_pk,er_oms_order_id,er_orig_oms_order_id,er_esis_no,er_transaction_no,er_exec_trans_type,er_exec_type,er_ord_status,er_order_rej_reason,er_cust_account,er_settle_type,er_fut_settle_dt,er_security_type,er_symbol_code,er_action,er_ord_quantity,er_ord_type,er_price_per_share,er_stop_price_per_share,er_currency_id,er_time_in_force,er_expire_time,er_last_trd_shares,er_traded_price_per_share,er_leaves_quantity,er_cumulative_qty,er_average_price,er_transact_time,er_trade_date,er_text,er_can_rej_response_to,er_can_rej_reason,er_disclosed_quantity,er_fill_quantity,er_read_flag,er_settle_flag,er_exec_rep_time,er_modified_datetime)
      VALUES      (OMSQ_TM_ID_PK.NEXTVAL,5168,0,08434308,0436594708434308,0,2,2,null,0079027076,9,null,null,ALDAR,BUY,100000,2,5.33,0.0,0,0,2009-12-17 00:00:00.0,100000,5.33,0,100000,5.33,2009-12-17 06:01:54.0,2009-12-17 06:01:54.0,Hold Created Inspite of Insufficient Bal,null,null,0,0,'N','N',SYSDATE,SYSDATE)


INSERT INTO OMTM_EXECUTE_REPORT(er_id_pk,er_oms_order_id,er_orig_oms_order_id,er_esis_no,er_transaction_no,er_exec_trans_type,er_exec_type,er_ord_status,er_order_rej_reason,er_cust_account,er_settle_type,er_fut_settle_dt,er_security_type,er_symbol_code,er_action,er_ord_quantity,er_ord_type,er_price_per_share,er_stop_price_per_share,er_currency_id,er_time_in_force,er_expire_time,er_last_trd_shares,er_traded_price_per_share,er_leaves_quantity,er_cumulative_qty,er_average_price,er_transact_time,er_trade_date,er_text,er_can_rej_response_to,er_can_rej_reason,er_disclosed_quantity,er_fill_quantity,er_read_flag,er_settle_flag,er_exec_rep_time,er_modified_datetime)       
VALUES      (OMSQ_TM_ID_PK.NEXTVAL,5170,0,08434400,0436599708434400,0,2,2,null,0059729784,9,null,null,SOROUH,SELL,82574,2,2.83,0.0,0,0,2009-12-17 00:00:00.0,82574,2.83,0,82574,2.83,2009-12-17 06:04:48.0,2009-12-17 06:04:48.0,null,null,null,0,0,'N', 'N',SYSDATE,SYSDATE)

Любая помощь будет высоко ценится

Спасибо

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

2009-12-17 06:01:54.0 не является допустимым литералом метки времени для Oracle

Вам необходимо использовать: TIMESTAMP '2009-12-17 06:01:54.0'

Хотя удивительно, что одно из этих утверждений действительно работает

0 голосов
/ 09 декабря 2010

Из того, что вы сказали, мне на ум приходят две возможности:

  • У вас проблема с параллелизмом. Используете ли вы общий подготовленный оператор или общее соединение, к которому одновременно обращаются несколько потоков?
  • Вы нашли ошибку в драйвере Oracle JDBC ... Вы пытались обновить систему до последней версии?
...