मैं जावा आधारित ओएसएस ऐप SqlHawk पर काम कर रहा हूं, क्योंकि इसकी एक विशेषता सर्वर के विरुद्ध एसक्यूएल स्क्रिप्ट को अपग्रेड करना है।मैं Java/jtds एप्लिकेशन में SQL GO कथन का समर्थन कैसे कर सकता हूं?
माइक्रोसॉफ्ट ने GO कथन के साथ बैच में एक स्क्रिप्ट को विभाजित करने के लिए एक सम्मेलन बना दिया है, जो एक अच्छा विचार है, लेकिन केवल स्ट्रिंग पर झूठे मैचों के लिए पूछ रहा है।
फिलहाल मैं एक बहुत ही मौलिक है:
// split where GO on its own on a line
Pattern batchSplitter = Pattern.compile("^GO", Pattern.MULTILINE);
...
String[] splitSql = batchSplitter.split(definition);
...
काम करता है किस तरह की लेकिन quoted GO statements या खरोज मुद्दों जैसी चीजों से ऊपर फिसल जा रहा है की संभावना है।
मुझे लगता है कि यह वास्तव में विश्वसनीय बनाने का एकमात्र तरीका ऐप में एक एसक्यूएल पार्सर होना है, लेकिन मुझे नहीं पता कि इस बारे में कैसे जाना है, या यह वास्तव में कम विश्वसनीय होने का अंत हो सकता है (विशेष रूप से यह टूल दिया गया है एकाधिक डीबीएमएस का समर्थन करता है)।
इस समस्या को हल करने के मैं किन तरीकों से हल कर सकता हूं? कोड उदाहरण यहां मेरे लिए बहुत उपयोगी होंगे।
Relevant sqlHawk code गीथब पर।
स्क्रिप्ट में पाए गए बैचों को निष्पादित करने के लिए वर्तमान में jtds का उपयोग कर रहा है।
मैंने ऐसा ही किया जब मुझे ऐसा ही करना पड़ा। यह केवल आंतरिक रूप से उपयोग किया जाता है और हमारे लिए ठीक काम करता है। – brain
यहां इडम ... यह मूर्ख-प्रमाण से बहुत दूर है और आपको यह तय करने की आवश्यकता है कि क्या आप 'जाओ 100' जैसी चीजों का समर्थन करना चाहते हैं। मुख्य बाधा आईएमएचओ तब होती है जब जीओ/* टिप्पणी ब्लॉक */का हिस्सा होता है। उनको अतिरिक्त प्रोसेसिंग की आवश्यकता होती है। (सभी टिप्पणियों और टिप्पणी ब्लॉक को पहले हटाएं, फिर विभाजन करें जो हमने किया) पीएस: आप कोड को 'सेट पेरिसोनली ऑन' के साथ उपसर्ग कर सकते हैं और यदि कोई 'गो के पास गलत वाक्यविन्यास' नहीं है तो विभाजन करने की कोई आवश्यकता नहीं है कोड .. अन्यथा आप त्रुटि से संकेतित लाइन-स्थान का उपयोग कर सकते हैं '' जाओ 'पर विभाजित करने के लिए इंगित करें ... काम कर सकता है, हालांकि आवश्यक से अधिक जटिल लगता है ... – deroby
चीजों को जटिल करने के लिए उदाहरण: 'EXEC (' सेट पर ध्यान दें; चयन करें * t_entity से; जाओ; प्रिंट करें 0 ') ' – deroby