संग्रहीत कार्यविधि और SQLite बनाना?


जवाबों:


217

SQLite को अन्य विशेषताओं का त्याग करना पड़ा है जो कुछ लोगों को उपयोगी लगती हैं, जैसे कि उच्च संगामिति, ठीक-ठाक अभिगम नियंत्रण, अंतर्निहित कार्यों का एक समृद्ध सेट, संग्रहीत कार्यविधियाँ , गूढ़ SQL भाषा सुविधाएँ, XML और / या जावा एक्सटेंशन, tera- या पेटा-बाइट मापनीयता, और आगे

स्रोत: SQLite के लिए उपयुक्त उपयोग


3
आप एक ही लक्ष्य ( stackoverflow.com/questions/172735/… ) को प्राप्त करने के लिए SQL CLR फ़ंक्शन के SQLite समकक्ष का उपयोग कर सकते हैं ।
डेविनबॉस्ट

@bostIT जोड़ के लिए धन्यवाद। System.Data.SQLite system.data.sqlite.org/index.html/doc/trunk/www/index.wiki के
h3xStream

91

उत्तर : नहीं

यहां बताया गया है ... मुझे लगता है कि डेटाबेस में संग्रहीत प्रोक्स होने का एक महत्वपूर्ण कारण यह है कि आप एसपी कोड को SQL इंजन के समान प्रक्रिया में निष्पादित कर रहे हैं। यह एक नेटवर्क से जुड़ी सेवा के रूप में काम करने के लिए डिज़ाइन किए गए डेटाबेस इंजनों के लिए समझ में आता है, लेकिन SQLite के लिए अनिवार्यता बहुत कम दी गई है कि यह एक अलग SQL इंजन प्रक्रिया के बजाय आपके आवेदन प्रक्रिया में DLL के रूप में चलता है। तो यह आपके सभी व्यावसायिक तर्क को लागू करने के लिए और अधिक समझ में आता है, जिसमें मेजबान भाषा में सपा कोड क्या होगा।

हालाँकि आप होस्ट भाषा (PHP, Python, Perl, C #, Javascript , Ruby etc) में अपने स्वयं के उपयोगकर्ता द्वारा परिभाषित कार्यों के साथ SQLite का विस्तार कर सकते हैं । फिर आप किसी भी SQLite चयन / अद्यतन / डालने / हटाने के हिस्से के रूप में इन कस्टम फ़ंक्शंस का उपयोग कर सकते हैं। मैंने पासवर्ड हैशिंग को लागू करने के लिए DevArt's SQLite का उपयोग करके C # में ऐसा किया है


16
स्पष्ट करने के लिए ... मैं यह नहीं कह रहा हूँ कि SQLite में SPs को लागू करने का कोई कारण नहीं है - अन्य DB इंजनों की तुलना में बहुत कम कारण।
टोनी ओ'हागन

4
संग्रहीत कार्यविधियाँ होने का मुख्य कारण SQL इंजेक्शन से बचाव है। हालांकि कई अन्य कारण हैं। उदाहरण के लिए संबंधित प्रश्नों को साझा करने में सक्षम होने के कारण उन्हें sqlite फ़ाइल में एम्बेड किया गया है। SQL इंजन के संदर्भ में चलने वाले मानक क्वेरी और SP का चयन करने के बीच कोई अंतर नहीं है। वे दोनों SQL इंजन पर दौड़ रहे हैं।
दान

4
@ सबसे पहले, एसपी का अस्तित्व बहुत पहले से था जब एसक्यूएल इंजेक्शन के बारे में भी सोचा गया था। हजारों SQL आधारित ऐप उनके बिना बनाए गए हैं जो इस हमले के खिलाफ सुरक्षित हैं। मैंने उन असुरक्षित एसपी की भी समीक्षा की है जो एसक्यूएल इंजेक्शन के लिए असुरक्षित हैं (आमतौर पर डायनेमिक एसक्यूएल पर आधारित)। तो नहीं, मुझे नहीं लगता कि यह एक प्राथमिक कारण है। इस हमले को रोकने के लिए ढेर सारे अन्य तरीके मौजूद हैं।
टोनी ओ'हागन

3
@Dan अधिकांश SQL इंजन क्लाइंट / सर्वर हैं (SQLite नहीं!), इन के लिए, प्रदर्शन एक प्रमुख मुद्दा है जब यह निर्णय लेते हुए कि आपके व्यावसायिक तर्क को कहां रखा जाए। व्यावसायिक तर्क को निष्पादित करना क्वेरी हो सकता है या SQL इंजन में SP के अंदर अंतर या सशर्त कोड (1) डेटा पुनर्प्राप्ति प्रदर्शन में सुधार कर सकता है, (2) नेटवर्क ट्रैफ़िक को कम करना (3) ऐप लेयर मेमोरी उपयोग को कम करना (4) कैश क्वेरी निष्पादन योजना (पूर्व-निर्धारित) एसपीएस)। अधिकांश ऐप डेवलपर अपने व्यावसायिक तर्क को SQL इंजन के बाहर ले जाना पसंद करते हैं (जाहिर है कि सवाल नहीं!)। SQLite के लिए यह कम जरूरी नहीं है क्योंकि यह क्लाइंट / सर्वर को सपोर्ट नहीं करता है।
टोनी ओ'हागन सेप

धन्यवाद, टोनी। मैं सोच रहा था कि SQLite में प्रक्रिया क्यों नहीं है, लेकिन इसमें बिल्ड कार्य ( sqlite.org/lang_corefunc.html ) है? क्या यह सही है कि क्लाइंट-सर्वर आरडीबीएमएस जैसे कि पोस्टग्रैक्स्ल के लिए, फ़ंक्शन और प्रक्रिया दोनों सर्वर साइड पर संग्रहीत हैं? चूँकि SQLite सर्वर रहित है, यदि SQLite में प्रक्रियाएँ नहीं हैं, तो उसी कारण से, क्या इसके कार्य भी नहीं होने चाहिए?
टिम

17

यदि आप अभी भी रुचि रखते हैं, तो क्रिस वुल्फ ने संग्रहीत प्रक्रियाओं के साथ SQLite का एक प्रोटोटाइप कार्यान्वयन किया। आप उनके ब्लॉग पोस्ट पर विवरण पा सकते हैं: SQLite में संग्रहीत कार्यविधियाँ जोड़ना


5
अनुच्छेद अब मर चुका है, लेकिन परियोजना github.com/wolfch/sqlite-3.7.3.p1 पर है । रीडमी फ़ाइल का अर्थ है कि यह उत्पादन के लिए तैयार नहीं है, न ही यह प्रयोग के लिए है। ऐसा लगता है कि यह अवधारणा का प्रमाण है।
pqsk

7

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

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