2010-12-02 1 views
1

J'ai un code dans mon application qui insère java.sql.Timestamp dans la colonne date oracle. Ce code fonctionne bien. Mais de temps en temps je reçois l'erreur:ORA-01858 Oracle Date Problème lors de l'insertion à partir de Java

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

Quand je vois le journal, inserts similaires exécutés en même temps réussissent, puis tout d'un coup une opération particulière échoue. Quand je regarde le format entre différentes déclarations, elles sont similaires. Impossible de deviner le problème.

La première instruction a échoué. Mais le second a été inséré avec succès.

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) 

Toute aide serait très appréciée

Merci

+1

Qu'est-ce qui vous fait penser que vous avez un problème avec un horodatage? – Flavio

+1

Qu'est-ce que "Hold créé malgré un Bal insuffisant" signifie? Êtes-vous sûr que c'est correct? –

+0

C'est juste une chaîne. quand il vient de Java il est cité. – AnithaR

Répondre

2

2009-12-17 06:01:54.0 n'est pas un horodatage valide littéral pour Oracle

Vous devez utiliser: TIMESTAMP '2009-12-17 06:01:54.0'

Bien qu'il est surprenant que l'on de ces déclarations fonctionne réellement

+0

Des centaines de telles instructions d'insertion et de mise à jour fonctionnent. mais de temps en temps dire dans un mois 2 ou 3 transactions échouent. Donc j'espère que le format ne peut pas être le problème. Est-ce que quelque chose d'autre me manque, vous m'aidera à le découvrir – AnithaR

+0

alors vous ne nous montrez pas le vrai SQL. Les instructions ci-dessus ** vont échouer sur Oracle –

+0

Mais mon SQL est exécuté en tant qu'instruction préparée. Comment puis-je obtenir la requête réelle qui est envoyée à la base de données – AnithaR

0

D'après ce que vous avez dit, deux possibilités viennent à l'esprit:

  • Vous avez un problème de concurrence. Utilisez-vous une instruction préparée partagée ou une connexion partagée, accédée par plusieurs threads simultanément?
  • Vous avez trouvé un bogue dans le pilote Oracle JDBC ... avez-vous essayé de mettre à jour la version la plus récente?
Questions connexes