Qu'est-ce que la requête ad hoc?

167

Je lis un livre sur SQL. Dans ce livre, il y a le terme de requête ad hoc , que je ne comprends pas.

Qu'est-ce qu'une requête ad hoc exactement?

zihado
la source

Réponses:

225

Ad hoc signifie «à cet effet» en latin. Vous pouvez appeler cela une requête "à la volée" ou une requête "juste pour". C'est le type de requête SQL que vous tapez vaguement là où vous en avez besoin

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

... qui est une requête entièrement différente chaque fois que cette ligne de code est exécutée, en fonction de la valeur de myId. Le contraire d'une requête ad hoc est une requête prédéfinie telle qu'une procédure stockée, dans laquelle vous avez créé une seule requête dans le but généralisé de sélectionner dans cette table (par exemple), et passez l'ID en tant que variable.

David Hedlund
la source
17
@David Hedlund votre requête est vulnérable à SQL injection attacks... Vous devez utiliser le paramètre.
Parid0kht
45
@Paridokht: Certainement. Je ne préconise pas cette utilisation, j'explique le concept d'une requête ad hoc, qui était la question.
David Hedlund
12
@DavidHedlund: Oui, je comprends ... mais peut-être vaut-il mieux le mentionner dans votre réponse car il y a des utilisateurs qui lisent ceci et n'ont aucune idée de cette attaque.
Parid0kht
46
Si un utilisateur le lit et n'a aucune idée de l'injection SQL, il ne travaille sur rien qui pourrait intéresser le pirate informatique. N'allons pas aux extrêmes ...
Michal B.
7
En tant que développeur avec des années d'expérience maintenant, j'ai appris beaucoup de choses en cherchant quelque chose de complètement différent de ce que je recherche. Donc, à mon humble avis, l' ajout d'une phrase comme « ... n'oubliez pas de faire les contrôles et la désinfection nécessaires pour myId ici » ne causerait aucun dommage.
scaryguy
24

Une requête ad hoc est une requête qui ne peut pas être déterminée avant le moment où la requête est émise. Il est créé afin d'obtenir des informations lorsque le besoin s'en fait sentir et il se compose de SQL construit dynamiquement qui est généralement construit par des outils de requête résidant sur le bureau.

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

haltunbay
la source
Donc, si je tape une requête statique et l'exécute une fois, ce n'est pas "ad hoc"?
jumxozizi
1

Je souhaite également ajouter que la requête ad hoc est vulnérable aux attaques par injection SQL. Nous devrions essayer d'éviter de l'utiliser et utiliser à la place des SQL paramétrés ( comme PreparedStatement en Java ).

xli
la source
7
Une requête ad hoc n'est pas vulnérable à l'injection SQL. Une requête non paramétrée qui accepte les entrées utilisateur est vulnérable à l'injection SQL.
Ben
@Ben Une requête ad-hoc est toujours non paramétrée. Il ne peut pas être attaqué par injection SQL si nous n'exposons pas les variables aux utilisateurs; mais le point est que la requête ad hoc est risquée pour l'injection SQL.
xli
1

Une requête ad hoc est une requête qui ne peut pas être déterminée avant le moment où la requête est émise. Il est créé afin d'obtenir des informations lorsque le besoin s'en fait sentir et il se compose de SQL construit dynamiquement qui est généralement construit par des outils de requête résidant sur le bureau. Une requête ad hoc ne réside pas dans l'ordinateur ou dans le gestionnaire de base de données mais est créée dynamiquement en fonction des besoins de l'utilisateur des données.

En SQL, une requête ad hoc est une commande / requête de typage lâche dont la valeur dépend d'une variable. Chaque fois que la commande est exécutée, le résultat est différent, en fonction de la valeur de la variable. Il ne peut pas être prédéterminé et relève généralement d'une requête SQL de programmation dynamique. Une requête ad hoc est de courte durée et est créée au moment de l'exécution.

Ketan Anand
la source
1

Une requête ad hoc est une requête créée pour fournir un jeu d'enregistrements spécifique à partir d'une ou de plusieurs tables fusionnées disponibles sur le serveur de base de données. Ces requêtes ont généralement un objectif à usage unique et peuvent ne pas être nécessaires à incorporer dans une procédure stockée pour être réexécutées ultérieurement.

Scénario ad hoc : vous recevez une demande pour un sous-ensemble spécifique de données avec un ensemble unique de variables. Si aucune requête pré-écrite ne peut fournir les résultats nécessaires, vous devez écrire une requête Ad-hoc pour générer les résultats du jeu d'enregistrements.

Au-delà d'une seule utilisation, les requêtes ad-hoc sont des procédures stockées ; c'est-à-dire les requêtes qui sont stockées dans l'outil d'interface de base de données. Ces procédures stockées peuvent ensuite être exécutées en séquence au sein d'un module ou d'une macro pour accomplir une tâche prédéfinie soit à la demande, selon une planification ou déclenchée par un autre événement.

Scénario de procédure stockée : chaque mois, vous devez générer un rapport à partir du même ensemble de tables et avec les mêmes variables (ces variables peuvent être des valeurs prédéfinies spécifiques, des valeurs calculées telles que «fin du mois en cours» ou des valeurs d'entrée d'un utilisateur). Vous créeriez la procédure sous forme de requête ad hoc la première fois. Après avoir testé les résultats pour garantir l'exactitude, vous pouvez choisir de déployer cette requête. Vous stockeriez ensuite la requête ou la série de requêtes dans un module ou une macro pour la réexécuter si nécessaire.

PV22
la source
0

Les requêtes ad hoc sont celles qui ne sont pas déjà définies et qui ne sont pas nécessaires régulièrement, elles ne sont donc pas incluses dans l'ensemble typique de rapports ou de requêtes

user3134258
la source
Pouvez-vous expliquer ce que vous écrivez davantage? Quel est l '«ensemble typique»; voulez-vous dire du code compilé?
Ben
0

Les déclarations ad hoc ne sont que des déclarations T-SQL indiquant qu'il a une clause Where, et que la clause Where peut en fait avoir un littéral comme:

Select * from member where member_no=285;

ou une variable:

declare @mno INT=285;
Select * from member where member_no=@mno
A.HADDAD
la source
-4

Une requête Ad-Hoc est:

  1. Question pré-planifiée.
  2. Question pré-programmée.
  3. question impulsive du moment.
  4. Question qui ne renverra aucun résultat.
Ravi
la source
Qu'est-ce que cela signifie en termes SQL? De plus, pas toutes les «questions qui ne renverront aucun résultat». sont des ad hocs.
jumxozizi
-5

La requête ad hoc est un type de définition d'ordinateur. Ce qui signifie que cette requête est spécialement conçue pour obtenir des informations quand elles sont uniquement nécessaires. Prédéfini. référez-vous à https://www.youtube.com/watch?v=0c8JEKmVXhU

Sanyog Tiwari
la source
1
Je pense que «prédéfini» est le contraire de «ad hoc».
jumxozizi
-6

Dans Sql Server, "Ad Hoc Query" est également utilisé pour les requêtes distribuées Ad Hoc. Il s'agit de requêtes ad hoc sur un autre serveur via OpenRowset ou OpenDatasource. Les requêtes distribuées ad hoc ne sont autorisées qu'après configuration. Il s'agit d'une option de configuration du serveur.

Expansion
la source
il ne s'agit pas de SQL Server. la question ne portait pas sur une solution d'entreprise particulière mais plutôt sur une compréhension générale de la signification des requêtes ad hoc
arthur