SQL कोड बनाने के लिए एल्गोरिथ्म


11

मुझे एक उपकरण (घर में उपयोग के लिए) चाहिए जो SQL कोड (SQL Server / MySQL) को प्रारूपित करेगा।
विभिन्न तृतीय पक्ष उपकरण और ऑनलाइन वेब साइटें हैं जो इसे करती हैं लेकिन वास्तव में मुझे इसकी आवश्यकता नहीं है।

इसलिए मैं अपना खुद का टूल लिखना चाहता हूं जो मेरी जरूरतों को पूरा करे।

पहला सवाल यह है कि एसक्यूएल कोड को कैसे स्वरूपित किया जाना चाहिए, इसके लिए कोई मानक या एक सम्मेलन है? (उपकरण है कि मैं इसे अलग तरह से प्रारूप की कोशिश की)

दूसरा सवाल, मुझे यह कार्य कैसे करना चाहिए? पहले पेड़ की तरह कुछ डेटा संरचना में sql क्वेरी को बदलना चाहिए?

जवाबों:


2

... क्या कोई मानक या एक कन्वेंशन है कि SQL कोड को कैसे स्वरूपित किया जाए?

मानक, नहीं। जहाँ तक SQL पार्सर का संबंध है, आप पूरे SQL कथन को एक पंक्ति में रख सकते हैं।

कन्वेंशन, यकीन है कि बहुत सारे हैं। यह निर्भर करता है कि आप परिवर्तनशीलता को कम करने की कोशिश कर रहे हैं या अंतरिक्ष को कम कर रहे हैं। मैंने दोनों मामलों के लिए SQL फ़ॉर्मेटर्स लिखे हैं।

मैंने सिर्फ यह बताने के लिए विशेष वर्ण संयोजनों का उपयोग किया कि मुझे एसक्यूएल स्टेटमेंट को कहां तोड़ना है।

मैंने जावा DB2 SQL फॉर्मेट से एक उदाहरण दिया है जो मैंने लिखा था। एक अन्य जावा प्रोग्राम ने जावा कोड उत्पन्न किया। SQL सीधे SYSIBMतालिकाओं से आया था ।

protected void prepareIndex00Select(String codeFacl)
        throws SQLException {
    StringBuffer sb = new StringBuffer();
    sb.append("SELECT CODE_FACL, SEQ_FACL, FILLER_TOF ");
    sb.append("    , CODE_TOF, NAME_FACL, NAME_LENGTH ");
    sb.append("    , CODE_FMB, ID_NCIC_ORI, NBR_PRINTER_PREFIX ");
    sb.append("    , ID_PERSONNEL_OFC, COMPLEX_CODE ");
    sb.append("    , PHS_CODE, DESIG_FACL_GRP, IND_DESIG_AUTH ");
    sb.append("    , CODE_FACL_I_T, INTKEY_FACL, IND_CDM_SENTENCING ");
    sb.append("    , MAL_FEM_IND, DEL_AFTER, IND_INMATES ");
    sb.append("    , VALUE_SO_CPU_STD, VALUE_SO_CPU_DAY ");
    sb.append("    , CODE_CAT, VALUE_DCN, XIDBKEY ");
    sb.append("    , FACL_FK_REGN ");
    sb.append("  FROM ");
    sb.append(creator);
    sb.append(".FACL ");
    sb.append("  WHERE CODE_FACL = ? ");
    if (additionalSQL != null) sb.append(additionalSQL);

    psIndex00 = connection.prepareStatement(sb.toString());
    psIndex00.setString(1, codeFacl);

}   // End prepareIndex00Select method

क्या आपका उत्पाद (फ़ॉर्मेटर) ऑनलाइन या डाउनलोड करने के लिए उपलब्ध है?
जूलिन्स

@ जुल्लिंस: नहीं। मैंने इसे सिर्फ यह साबित करने के लिए लिखा था कि मैं जावा एप्लिकेशन लिख सकता हूं जो जावा कक्षाएं लिखता है, साथ ही डेटाबेस कॉलम और इंडेक्स टेबल (एसवाईएसबीबीएम) से एसक्यूएल का निर्माण करता है। अफसोस की बात है, मैं जिस किसी के साथ काम करता हूं उसे उपयोगी नहीं पाया है। मुझे लगता है कि अगर आप चाहें तो मैं कहीं कोड डाल सकता हूं।
गिल्बर्ट ले ब्लैंक

मैं इसकी सराहना करूंगा, मैं केवल प्रारूपण भाग देखना चाहता हूं।
जूलिन्स

@ जुलिन्स: मैं अब काम पर हूं, इसलिए मैं सार्वजनिक रिपोजिटरी तक नहीं पहुंच सकता। मैं इस सप्ताह के अंत में कहीं न कहीं कोड डालूंगा, और आपको बता दूंगा कि इसे कैसे एक्सेस करना है।
गिल्बर्ट ले ब्लैंक

कोड के बारे में क्या? क्या आप इसे कहीं रख सकते हैं?
जूलिन्स

2

थोड़ी देर, केवल इस पर ठोकर खाई, क्षमा करें।

गरीब आदमी का टी-एसक्यूएल फॉर्मैटर एक ओपन-सोर्स टी-एसक्यूएल फॉर्मैटर (लाइब्रेरी, एसएसएमएस प्लगइन, कमांड-लाइन फाइल फॉर्मैटर, आदि) है - कार्यान्वयन यथोचित रूप से मॉड्यूलर है और MySQL टोकन और फॉर्मैटर को लागू करना बहुत कठिन नहीं होना चाहिए टी-एसक्यूएल वालों से मिलान करने के लिए (मैंने अभी तक प्राथमिक रूप से ऐसा नहीं किया है क्योंकि मेरे पास अभी MySQL के लिए कोई अनुभव या उपयोग नहीं है, इसलिए यह मेरे समय का अच्छा उपयोग नहीं है)।

लाइब्रेरी को AGPL लाइसेंस के साथ C # (2.0) में लागू किया गया है - इसका मतलब है कि आप इसे किसी भी संशोधन को प्रकाशित किए बिना व्यावसायिक रूप से पुनर्वितरित या सार्वजनिक सेवा के रूप में सामने नहीं ला सकते हैं, लेकिन इन-हाउस उपयोगकर्ता के लिए यह कोई समस्या नहीं होनी चाहिए, चाहे वह अनुकूलित हो या नहीं।

जैसा कि @ गिल्बर्ट ले ब्लांक ने पहले ही उत्तर दिया था, निश्चित रूप से एसक्यूएल फॉर्मेटिंग पर कोई मानक नहीं है - यहां तक ​​कि वाणिज्यिक फॉर्मेटर्स भी हैं, वे जो अलग-अलग विकल्प प्रदान करते हैं, वे एक ही डिफॉल्ट पर अभिसरण नहीं करते हैं या आवश्यक रूप से समान आउटपुट स्वरूपों का समर्थन करते हैं।

स्क्रैच से अपने स्वयं के उपकरण को लिखने के संबंध में, अगर आपको विभिन्न प्रकार के मामलों को संभालने की आवश्यकता है, तो मैं इसके खिलाफ सलाह दूंगा: कम से कम टी-एसक्यूएल के लिए, क्यूटी के साथ एसटीई के साथ एसक्यूएल मल्टी-स्टेटमेंट बैच को संभालना, एमईआरईजी के बयान, उप-प्रश्न व्युत्पन्न टेबल, आदि बहुत मुश्किल हो जाता है :)

मामले में यह किसी भी तरह की मदद है: http://www.itieshack.com/PoorMansTSqlFormatter.ashx

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.