Saklı yordam ve SQLite oluşturuluyor mu?


Yanıtlar:


217

SQLite, bazı kişilerin yüksek eşzamanlılık, ince taneli erişim kontrolü, zengin bir dizi yerleşik işlev, depolanmış prosedürler , ezoterik SQL dil özellikleri, XML ve / veya Java uzantıları, tera- veya peta-bayt ölçeklenebilirliği vb.

Kaynak: SQLite İçin Uygun Kullanım Alanları


3
Aynı hedefe ulaşmak için SQL CLR işlevlerinin SQLite eşdeğerini kullanabilirsiniz ( stackoverflow.com/questions/172735/… ).
devinbost

@bostIT Eklediğiniz için teşekkürler. System.Data.SQLite için
başvuru

91

Yanıt : HAYIR

İşte Neden ... Ben bir veritabanında procs depolanan önemli bir nedeni, SQL kodu ile aynı süreçte SP kodu yürütmek olduğunu düşünüyorum. Bu, ağa bağlı bir hizmet olarak çalışmak üzere tasarlanmış veritabanı motorları için mantıklıdır, ancak SQLite için zorunlu olan, ayrı bir SQL motoru işleminden ziyade uygulama işleminizde bir DLL olarak çalıştığı göz önüne alındığında çok daha azdır. Bu nedenle, ana bilgisayar dilinde SP kodu ne dahil olmak üzere tüm iş mantığınızı uygulamak daha mantıklıdır.

Bununla birlikte, SQLite'ı ana bilgisayar dilinde (PHP, Python, Perl, C #, Javascript , Ruby vb.) Kullanıcı tanımlı işlevlerinizle genişletebilirsiniz . Daha sonra bu özel işlevleri herhangi bir SQLite seçme / güncelleme / ekleme / silme işleminin parçası olarak kullanabilirsiniz. Ben ettik C # Bu yapıldığında kullanarak Devart en SQLite'ı Parola karma uygulamaktır.


16
Açıklığa kavuşturmak için ... SQLite SP'leri uygulamak için hiçbir neden olduğunu söylemiyorum - diğer DB motorlarına göre çok daha az sebep.
Tony O'Hagan

4
Saklı yordamlar olması KEY nedeni SQL Injection önlemek için etmektir. Bununla birlikte başka birçok neden var. Örneğin, ilgili sorguları sqlite dosyasına yerleştirerek paylaşabilmek. SQL Engine bağlamında çalışan standart bir sorgu ile SP seçilmesi arasında kesinlikle bir fark yoktur. Her ikisi de SQL MOTORUNDA ÇALIŞIYOR.
Dan

4
@Dan İlk olarak, SP'ler SQL enjeksiyonu düşünülmeden çok önce vardı. Bu saldırıya karşı güvenli olan binlerce SQL tabanlı uygulama onlarsız olarak oluşturulmuştur. Ben de (genellikle dinamik SQL tabanlı) SQL enjeksiyon savunmasız olan güvenli SP gözden geçirdi kod. Yani hayır, bu temel bir nedendir. Bu saldırıyı yığının ilerisine engellemenin başka yolları da var.
Tony O'Hagan

3
@Dan Çoğu SQL motoru istemci / sunucudur (SQLite DEĞİL!), Bunlar için performans, iş mantığınızı nereye koyacağınıza karar verirken önemli bir konudur. SQL motorundaki bir SP içindeki sorgu VEYA interaktif VEYA koşullu kodunun iş mantığını yürütmek (1) veri alma performansını artırabilir, (2) ağ trafiğini azaltabilir (3) uygulama katmanı bellek kullanımını azaltabilir (4) önbellek sorgusu yürütme planları (önceden derlenmiş) SP). Çoğu uygulama geliştiricisi, iş mantığını bazılarını SQL motorunun dışına taşımayı tercih eder (açıkçası sorgular değil!). SQLite için bu istemci / sunucuyu desteklemediğinden daha az zorunludur.
Tony O'Hagan

Teşekkürler Tony. Neden SQLite yordamları yok ama yerleşik fonksiyonları ( sqlite.org/lang_corefunc.html ) var merak ediyordum ? Postgresql gibi istemci-sunucu RDBMS için, hem işlevlerin hem de yordamların sunucu tarafında depolanması doğru mudur? SQLite sunucusuz olduğundan, SQLite'nin prosedürleri yoksa, aynı nedenden dolayı, işlevleri de olmamalı mı?
Tim


7

Yine de, sahte bir spider için adlandırılmış özel bir tablo kullanarak AFTER INSERT tetikleyici ile taklit etmek mümkündür . Özel tablo satırları, sahte sp'niz için parametreleri içerir ve sonuç döndürmesi gerekiyorsa, bu sonuçları içermek için ikinci bir (olası geçici) tabloya sahip olursunuz (sahte sp ile ilişkili adıyla). İki sorgu gerektirir: birincisi verileri sahte-sp-tetikleyici tablosuna eklemek için, ikincisi boş olan ya da bir şeyler ters gittiğinde bir mesaj alanına sahip olan sahte-sp-sonuç tablosundan SELECT yapmak için .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.