Geçici Sorgu nedir?


167

SQL hakkında bir kitap okuyorum. Bu kitapta anlamadığım Ad Hoc Query terimi var .

Geçici sorgu tam olarak nedir?

Yanıtlar:


225

Ad hoc "bu amaçla" için latin. Buna "anında" sorgusu veya "aynen" sorgusu diyebilirsiniz. İhtiyacınız olan yere gevşekçe yazdığınız bir SQL sorgusu türüdür

var newSqlQuery = "SELECT * FROM table WHERE id = " + myId;

... bu kod satırı her yürütüldüğünde, değerine bağlı olarak tamamen farklı bir sorgudur myId. Geçici sorgunun tersi, Depolanmış Yordam gibi önceden tanımlanmış bir sorgudur; burada, o tablodan (örneğin) seçim yapmak ve kimliği değişken olarak geçirmek için genelleştirilmiş bir amaç için tek bir sorgu oluşturmuş olursunuz.


17
@David Hedlund Sorgunuz savunmasız SQL injection attacks... Parametreyi kullanmalısınız.
Parid0kht

45
@Paridokht: Kesinlikle. Ben bu kullanımı savunmuyorum, soru olan geçici bir sorgu kavramını açıklıyorum.
David Hedlund

12
@DavidHedlund: Evet, anladım ... ama cevabınızda bahsetmek daha iyi olabilir, çünkü bunu okuyan ve bu saldırı hakkında hiçbir fikri olmayan kullanıcılar var.
Parid0kht

46
Bir kullanıcı okursa ve SQL enjeksiyonu hakkında bir fikri yoksa, bilgisayar korsanının ilgisini çekebilecek hiçbir şey üzerinde çalışmaz.
Michal B.

7
Şimdi yılların tecrübesine sahip bir geliştirici olarak, aradığımdan tamamen farklı bir şey ararken birçok şey öğreniyorum. Bu yüzden IMHO, ' ... burada myId için gerekli kontrolleri ve dezenfekte etmeyi unutma ' gibi bir cümle eklemek herhangi bir zarara neden olmaz.
scaryguy


1

Ayrıca ad hoc sorgusunun SQL enjeksiyon saldırılarına karşı savunmasız olduğunu da eklemek istersiniz. Bunu kullanmaktan kaçınmaya çalışmalı ve bunun yerine parametreli SQL'leri kullanmalıyız ( Java'da PreparedStatement gibi ).


7
Geçici bir sorgu SQL Injection'a karşı savunmasız değildir . Kullanıcı girişini kabul eden parametresiz bir sorgu SQL Injection'a karşı savunmasızdır.
Ben

@Ben Geçici sorgu her zaman parametrelendirilmez. Değişkenleri kullanıcılara göstermezsek SQL enjeksiyonuna saldırılamaz; ancak önemli olan geçici sorgu SQL Injection için risklidir.
xli

1

Geçici Sorgu, sorgunun yayınlandığı andan önce belirlenemeyen bir sorgudur. İhtiyaç duyulduğunda bilgi almak için oluşturulur ve genellikle masaüstünde yerleşik sorgu araçlarıyla oluşturulan dinamik olarak oluşturulmuş SQL'den oluşur. Özel bir sorgu bilgisayarda veya veritabanı yöneticisinde bulunmaz, ancak veri kullanıcısının ihtiyaçlarına bağlı olarak dinamik olarak oluşturulur.

SQL'de, ad hoc sorgusu, değeri bazı değişkenlere bağlı olan gevşek yazılan bir komut / sorgudur. Komut her çalıştırıldığında, değişkenin değerine bağlı olarak sonuç farklıdır. Önceden belirlenemez ve genellikle dinamik programlama SQL sorgusu altında gelir. Özel bir sorgu kısa ömürlüdür ve çalışma zamanında oluşturulur.


1

Bir Geçici sorgu herhangi birini veya birden DB sunucuda kullanılabilir tablolar birleşti belirli bir recordset sağlamak için oluşturuldu biridir. Bu sorgular genellikle tek kullanımlık bir amaca hizmet eder ve gelecekte tekrar çalıştırmak için herhangi bir saklı prosedüre dahil edilmesi gerekmeyebilir.

Geçici senaryo : Benzersiz bir değişken kümesine sahip belirli bir veri alt kümesi için bir istek alırsınız. Gerekli sonuçları sağlayabilecek önceden yazılmış bir sorgu yoksa, kayıt kümesi sonuçlarını oluşturmak için Geçici bir sorgu yazmanız gerekir.

Tek bir kullanımın ötesinde geçici sorgu saklı yordamlardır ; yani DB arayüz aracı içerisinde saklanan sorgular. Bu saklı yordamlar daha sonra isteğe bağlı olarak, bir zamanlamada veya başka bir olay tarafından tetiklenen önceden tanımlanmış bir görevi gerçekleştirmek için bir modül veya makro içinde sırayla yürütülebilir.

Saklı Yordam senaryosu : Her ay aynı tablo kümesinden ve aynı değişkenlerden bir rapor oluşturmanız gerekir (bu değişkenler önceden tanımlanmış belirli değerler, “geçerli ayın sonu” gibi hesaplanan değerler veya kullanıcının giriş değerleri olabilir). Yordamı ilk kez geçici bir sorgu olarak oluşturursunuz. Sonuçları doğruluğundan emin olmak için test ettikten sonra bu sorguyu dağıtmayı seçebilirsiniz. Daha sonra, gerektiğinde yeniden çalıştırmak için sorguyu veya sorgu serisini bir modül veya makroda depolarsınız.


0

Özel sorgular, düzenli olarak gerekli olmayan, daha önce tanımlanmamış olanlardır, bu nedenle tipik raporlar veya sorgular kümesine dahil edilmezler


Ne yazdığını açıklayabilir misin? "Tipik küme" nedir; derlenmiş kod mu demek istediniz?
Ben

0

Geçici İfadeler yalnızca Where Cümlesi olduğu ve Where cümlesinin gerçekte aşağıdaki gibi bir değişmezine sahip olabileceği T-SQL İfadeleridir:

Select * from member where member_no=285;

veya bir değişken:

declare @mno INT=285;
Select * from member where member_no=@mno

-4

Geçici bir sorgu:

  1. Önceden planlanmış soru.
  2. Önceden planlanmış soru.
  3. an soru teşvik.
  4. Herhangi bir sonuç döndürmeyecek soru.

SQL açısından bunun anlamı nedir? Ayrıca, tüm "Herhangi bir sonuç döndürmez sorular." ad hocs.
jumxozizi


-6

Sql Server'da "Ad Hoc Query", Ad Hoc Dağıtılmış Sorgular için de kullanılır. Bunlar OpenRowset veya OpenDatasource üzerinden başka bir sunucudaki geçici sorgulardır. Özel Dağıtılmış Sorgulara yalnızca yapılandırıldıktan sonra izin verilir. Bu bir Sunucu yapılandırma seçeneğidir.


Bu sql Server ile ilgili değildir. soru belirli bir entreprise çözümle değil, ad hoc sorguların anlamıyla ilgili genel bir anlayışla ilgiliydi
arthur
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.