मेरे पास कोड का एक छोटा सा स्निपेट है जो कुछ डेटा पकड़ लेता है और ओरेकल डेटाबेस में डालने के लिए SQL कथन उत्पन्न करता है। फिर इन्हें Oracle सर्वर पर JDBC ड्राइवर के माध्यम से निष्पादित किया जाता है।
जिस मुद्दे पर मैं चल रहा हूं वह यह है कि यदि इन बयानों में एक TO_BINARY_DOUBLE कॉल है तो वे हमेशा मेरे लिए विफल होते हैं और मेरी टीम में किसी और के लिए नहीं, जिसके पास ठीक वैसा ही ड्राइवर और वातावरण है जैसा मैं करता हूं, जो अविश्वसनीय रूप से अजीब है।
CREATE TABLE "SOME_TABLE" (
"_id" BINARY_DOUBLE NOT NULL,
"double" BINARY_DOUBLE,
PRIMARY KEY ("_id")
);
DECLARE
"#value__id" BINARY_DOUBLE;
"#value_double" BINARY_DOUBLE;
BEGIN
"#value__id" := TO_BINARY_DOUBLE('0.0');
"#value_double" := TO_BINARY_DOUBLE('1.2');
INSERT INTO "SOME_TABLE" ("_id", "double")
VALUES(
"#value__id",
"#value_double"
);
END;
और त्रुटि:
Unable to execute SQL statement batch: error occurred during batching: ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 5
उम्मीद है कि कोई स्रोत पर कुछ प्रकाश डाल सकता है, या मुझे इसे खोजने की कोशिश करने के लिए सही दिशा में इंगित कर सकता है।
1 उत्तर
ऐसा प्रतीत होता है कि आपके पास अपने सहकर्मियों के लिए भिन्न NLS सेटिंग्स हैं; विशेष रूप से NLS_NUMERIC_CHARACTERS
। उस सेट के साथ '.,'
कोड काम करता है; इसके साथ ',.'
पर सेट किया गया है (अर्थात एक अवधि के बजाय दशमलव विभाजक के रूप में अल्पविराम की अपेक्षा) यह आपके द्वारा देखी जाने वाली त्रुटि को फेंक देता है।
आप या तो अपने जावा वातावरण को अपने सहयोगियों से मिलाने के लिए बदल सकते हैं, जिसमें संभवतः आपके पीसी या जेवीएम झंडे के माध्यम से लोकेल बदलना शामिल होगा; या इसे फ़ंक्शन कॉल में ओवरराइड करें:
"#value__id" := TO_BINARY_DOUBLE('0.0', '999D999', 'nls_numeric_characters=''.,''');
"#value_double" := TO_BINARY_DOUBLE('1.2', '999D999', 'nls_numeric_characters=''.,''');
एक प्रारूप मास्क का उपयोग करना जिसमें आपको जो भी स्ट्रिंग मानों से निपटना पड़ सकता है - मैं अनुमान लगा रहा हूं कि वे मान सामान्य रूप से उपयोगकर्ता या प्रक्रिया तर्क से आएंगे। बेशक, यह तब मानता है कि स्ट्रिंग मानों में हमेशा दशमलव विभाजक के रूप में एक अवधि होगी।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।
id
औरdouble
को नाम दें औरINSERT INTO SOME_TABLE (id, double) VALUES(TO_BINARY_DOUBLE('0.0'), TO_BINARY_DOUBLE('1.2'));
डीबी<>बेला