Co to jest zapytanie ad hoc?


167

Czytam książkę o SQL. W tej książce jest termin Zapytanie ad hoc , którego nie rozumiem.

Czym dokładnie jest zapytanie ad hoc?

Odpowiedzi:


225

Ad hoc jest po łacinie „w tym celu”. Można to nazwać zapytaniem „w locie” lub „po prostu tak”. Jest to rodzaj zapytania SQL, które po prostu luźno wpisujesz tam, gdzie jest to potrzebne

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

... co jest zupełnie innym zapytaniem za każdym razem, gdy wykonywany jest ten wiersz kodu, w zależności od wartości myId. Przeciwieństwem zapytania ad hoc jest zapytanie predefiniowane, takie jak procedura składowana, w której utworzono pojedyncze zapytanie dla całego uogólnionego celu wyboru z tej tabeli (powiedzmy) i przekazano identyfikator jako zmienną.


17
@David Hedlund Twoje zapytanie jest podatne na SQL injection attacks... Musisz użyć parametru.
Parid0kht

45
@Paridokht: Oczywiście. Nie opowiadam się za tym użyciem, wyjaśniam koncepcję zapytania ad hoc, o które chodziło.
David Hedlund

12
@DavidHedlund: Tak, rozumiem ... ale może lepiej wspomnieć o tym w swojej odpowiedzi, ponieważ są użytkownicy, którzy to czytają i nie mają pojęcia o tym ataku.
Parid0kht

46
Jeśli użytkownik to czyta i nie ma pojęcia o iniekcji SQL, to nie pracuje nad niczym, co mogłoby zainteresować hakera. Nie idźmy do skrajności ...
Michał B.

7
Jako programista z wieloletnim doświadczeniem nauczyłem się wielu rzeczy, szukając czegoś zupełnie innego niż to, czego szukam. Więc IMHO dodanie zdania, takiego jak „ ... nie zapomnij wykonać niezbędnych kontroli i odkażania myId tutaj ” nie spowodowałoby żadnej szkody.
scaryguy

24

Zapytanie ad-hoc to zapytanie, którego nie można określić przed jego wysłaniem. Jest tworzony w celu uzyskania informacji, gdy zajdzie taka potrzeba, i składa się z dynamicznie konstruowanego kodu SQL, który jest zwykle konstruowany przez narzędzia kwerendy rezydujące na komputerze stacjonarnym.

Sprawdź: http://www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html


Więc jeśli wpiszę statyczne zapytanie i uruchomię je raz, nie jest to „ad hoc”?
jumxozizi

1

Chcę również dodać, że kwerenda ad hoc jest podatna na ataki typu SQL injection. Powinniśmy starać się go unikać i zamiast tego używać sparametryzowanych SQL ( takich jak PreparedStatement w Javie ).


7
Zapytanie ad hoc nie jest podatne na iniekcję SQL. Niesparametryzowane zapytanie, które akceptuje dane wejściowe użytkownika, jest podatne na iniekcję SQL.
Ben

@Ben Zapytanie ad hoc jest zawsze nie sparametryzowane. Nie można go zaatakować, jeśli nie ujawnimy tych zmiennych użytkownikom; ale chodzi o to, że zapytanie ad-hoc jest ryzykowne dla SQL Injection.
xli

1

Zapytanie ad-hoc to zapytanie, którego nie można określić przed jego wysłaniem. Jest tworzony w celu uzyskania informacji, gdy zajdzie taka potrzeba, i składa się z dynamicznie konstruowanego kodu SQL, który jest zwykle konstruowany przez narzędzia kwerendy rezydujące na komputerze stacjonarnym. Zapytanie ad hoc nie rezyduje na komputerze ani w menedżerze bazy danych, ale jest tworzone dynamicznie w zależności od potrzeb użytkownika danych.

W SQL zapytanie ad hoc to luźno wpisane polecenie / zapytanie, którego wartość zależy od jakiejś zmiennej. Za każdym razem, gdy polecenie jest wykonywane, wynik jest inny, w zależności od wartości zmiennej. Nie można go z góry określić i zwykle podlega zapytaniu SQL programowania dynamicznego. Zapytanie ad hoc jest krótkotrwałe i jest tworzone w czasie wykonywania.


1

Zapytań ad-hoc jest stworzony, aby zapewnić konkretną rekordów z jednego lub wielu połączone tabele dostępne na serwerze DB. Te zapytania zwykle służą do jednorazowego użytku i może nie być konieczne dołączanie ich do żadnej procedury składowanej w celu ponownego uruchomienia w przyszłości.

Scenariusz ad-hoc : Otrzymujesz żądanie dotyczące określonego podzbioru danych z unikalnym zestawem zmiennych. Jeśli nie ma wstępnie napisanego zapytania, które mogłoby dostarczyć niezbędnych wyników, należy napisać zapytanie ad-hoc, aby wygenerować wyniki zestawu rekordów.

Poza kwerendą Ad-hoc jednorazowego użytku są procedury składowane ; tj. zapytania, które są przechowywane w narzędziu interfejsu DB. Te procedury składowane mogą być następnie wykonywane sekwencyjnie w module lub makrze w celu wykonania wstępnie zdefiniowanego zadania na żądanie, zgodnie z harmonogramem lub wyzwolone przez inne zdarzenie.

Scenariusz procedury składowanej : Co miesiąc musisz wygenerować raport z tego samego zestawu tabel i z tymi samymi zmiennymi (zmienne te mogą być konkretnymi wstępnie zdefiniowanymi wartościami, wartościami obliczonymi, takimi jak „koniec bieżącego miesiąca” lub wartościami wejściowymi użytkownika). Procedura została utworzona jako zapytanie ad hoc za pierwszym razem. Po przetestowaniu wyników w celu zapewnienia dokładności możesz zdecydować się na wdrożenie tego zapytania. Następnie możesz zapisać zapytanie lub serię zapytań w module lub makrze, aby w razie potrzeby uruchomić je ponownie.


0

Zapytania ad hoc to takie, które nie zostały jeszcze zdefiniowane, które nie są potrzebne regularnie, więc nie są uwzględniane w typowym zestawie raportów lub zapytań


Czy możesz wyjaśnić, co piszesz więcej? Co to jest „typowy zestaw”; masz na myśli skompilowany kod?
Ben

0

Instrukcje ad-hoc to po prostu instrukcje T-SQL, które mają klauzulę Where, a klauzula Where może mieć literał taki jak:

Select * from member where member_no=285;

lub zmienna:

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

-4

Zapytanie ad-hoc to:

  1. Wcześniej zaplanowane pytanie.
  2. Zaplanowane pytanie.
  3. pod wpływem chwili pytanie.
  4. Pytanie, które nie zwróci żadnych wyników.

Co to oznacza w przypadku języka SQL? Nie wszystkie „Pytania, które nie spowodują żadnych wyników”. są ad hocami.
jumxozizi


-6

W serwerze Sql „Zapytanie ad hoc” jest również używane w przypadku zapytań rozproszonych ad hoc. Są to zapytania ad hoc na innym serwerze za pośrednictwem OpenRowset lub OpenDatasource. Zapytania rozproszone ad hoc są dozwolone tylko po skonfigurowaniu tak. To jest opcja konfiguracji serwera.


nie chodzi o SQL Server. pytanie nie dotyczyło konkretnego rozwiązania dla przedsiębiorstwa, ale raczej ogólnego zrozumienia znaczenia zapytań ad hoc
arthur
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.