Apa itu Pertanyaan Ad Hoc?


167

Saya membaca buku tentang SQL. Dalam buku itu ada istilah Ad Hoc Query , yang tidak saya mengerti.

Apa sebenarnya permintaan ad hoc?

Jawaban:


225

Ad hoc adalah bahasa latin untuk "untuk tujuan ini". Anda bisa menyebutnya kueri "on the fly", atau kueri "just so". Ini adalah jenis query SQL yang baru saja Anda ketikkan di mana Anda membutuhkannya

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

... yang merupakan permintaan yang sama sekali berbeda setiap kali baris kode dieksekusi, tergantung pada nilai myId. Kebalikan dari kueri ad hoc adalah kueri yang telah ditentukan sebelumnya seperti Prosedur Tersimpan, di mana Anda telah membuat kueri tunggal untuk seluruh tujuan umum pemilihan dari tabel itu (katakanlah), dan meneruskan ID sebagai variabel.


17
@ David Hedlund, permintaan Anda rentan terhadap SQL injection attacks... Anda harus menggunakan parameter.
Parid0kht

45
@Paridokht: Tentu saja. Saya tidak menganjurkan penggunaan itu, saya menjelaskan konsep permintaan ad hoc, yang merupakan pertanyaan.
David Hedlund

12
@ Davidvided: Ya, saya Mengerti..tapi mungkin lebih baik untuk menyebutkannya dalam jawaban Anda karena ada pengguna yang membaca ini dan tidak memiliki gagasan tentang serangan ini.
Parid0kht

46
Jika pengguna membacanya dan tidak memiliki gagasan tentang injeksi SQL, mereka tidak mengerjakan apa pun yang mungkin menarik bagi peretas. Jangan sampai ekstrem ...
Michal B.

7
Sebagai pengembang dengan pengalaman bertahun-tahun sekarang, saya telah belajar banyak hal ketika saya mencari sesuatu yang sama sekali berbeda dari apa yang saya cari. Jadi IMHO menambahkan kalimat seperti ' ... jangan lupa untuk melakukan kontrol dan sanitasi yang diperlukan untuk myId di sini ' tidak akan membahayakan.
scaryguy


1

Juga ingin menambahkan bahwa permintaan ad hoc rentan terhadap serangan injeksi SQL. Kita harus mencoba untuk menghindari menggunakannya dan menggunakan SQL berparameter sebagai gantinya ( seperti PreparedStatement di Jawa ).


7
Kueri ad-hoc tidak rentan terhadap SQL Injection. Kueri yang tidak dipilah-pilah yang menerima input pengguna rentan terhadap SQL Injection.
Ben

@Ben Permintaan ad-hoc selalu tidak dapat diparameterisasi. Tidak mungkin injeksi SQL diserang jika kita tidak mengekspos variabel ke pengguna; tetapi intinya ad-hoc query berisiko terhadap SQL Injection.
xli

1

Kueri Ad-Hoc adalah kueri yang tidak dapat ditentukan sebelum saat kueri diterbitkan. Itu dibuat untuk mendapatkan informasi ketika diperlukan dan itu terdiri dari SQL yang dibangun secara dinamis yang biasanya dibangun oleh alat permintaan desktop-resident. Permintaan ad hoc tidak berada di komputer atau manajer basis data tetapi dibuat secara dinamis tergantung pada kebutuhan pengguna data.

Dalam SQL, kueri ad hoc adalah perintah / kueri yang diketik secara longgar yang nilainya tergantung pada beberapa variabel. Setiap kali perintah dieksekusi, hasilnya berbeda, tergantung pada nilai variabel. Itu tidak dapat ditentukan sebelumnya dan biasanya datang di bawah pemrograman dinamis query SQL. Permintaan ad hoc berumur pendek dan dibuat saat runtime.


1

Sebuah permintaan Ad-hoc adalah salah satu diciptakan untuk memberikan recordset dari setiap atau beberapa digabung tabel yang tersedia pada server DB. Pertanyaan ini biasanya melayani tujuan sekali pakai, dan mungkin tidak perlu untuk dimasukkan ke dalam prosedur tersimpan untuk dijalankan lagi di masa depan.

Skenario ad-hoc : Anda menerima permintaan untuk subset data tertentu dengan serangkaian variabel unik. Jika tidak ada permintaan pra-tertulis yang dapat memberikan hasil yang diperlukan, Anda harus menulis permintaan Ad-hoc untuk menghasilkan hasil rekaman.

Di luar sekali pakai Permintaan Ad-hoc adalah prosedur tersimpan ; yaitu pertanyaan yang disimpan dalam alat antarmuka DB. Prosedur yang tersimpan ini kemudian dapat dieksekusi secara berurutan dalam modul atau makro untuk menyelesaikan tugas yang telah ditentukan baik berdasarkan permintaan, sesuai jadwal, atau dipicu oleh peristiwa lain.

Skenario Prosedur Tersimpan : Setiap bulan Anda perlu membuat laporan dari set tabel yang sama dan dengan variabel yang sama (variabel-variabel ini mungkin nilai yang telah ditentukan sebelumnya, nilai yang dihitung seperti "akhir bulan berjalan", atau nilai input pengguna). Anda akan membuat prosedur sebagai permintaan ad-hoc pertama kali. Setelah menguji hasil untuk memastikan keakuratan, Anda dapat memilih untuk menggunakan kueri ini. Anda kemudian akan menyimpan kueri atau serangkaian kueri dalam modul atau makro untuk berjalan kembali sesuai kebutuhan.


0

Kueri ad hoc adalah pertanyaan yang belum ditentukan yang tidak diperlukan secara teratur, sehingga tidak termasuk dalam rangkaian laporan atau kueri yang khas


Bisakah Anda jelaskan apa yang sedang Anda tulis? Apa itu "set khas"; maksud Anda mengkompilasi kode?
Ben

0

Statemen Ad-hoc hanyalah Pernyataan T-SQL yang memiliki Klausa Dimana, dan dimana Klausa sebenarnya dapat memiliki literal seperti:

Select * from member where member_no=285;

atau variabel:

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

-4

Permintaan Ad-Hoc adalah:

  1. Pertanyaan yang sudah direncanakan sebelumnya.
  2. Pertanyaan yang sudah dijadwalkan sebelumnya.
  3. memacu pertanyaan saat ini.
  4. Pertanyaan yang tidak akan mengembalikan hasil apa pun.

Apa artinya ini dalam istilah SQL? Juga, tidak semua "Pertanyaan yang tidak akan mengembalikan hasil apa pun." adalah ad hocs.
jumxozizi


-6

Di Sql Server, "Permintaan Ad Hoc" juga digunakan untuk Kueri Terdistribusi Ad Hoc. Ini adalah permintaan ad hoc di server lain melalui OpenRowset atau OpenDatasource. Kueri Terdistribusi Ad Hoc hanya diizinkan setelah mengonfigurasinya. Ini adalah opsi konfigurasi Server.


ini bukan tentang sql Server. pertanyaannya bukan tentang solusi entreprise tertentu tetapi lebih pada pemahaman umum tentang makna pertanyaan ad hoc
arthur
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.