O que é consulta ad hoc?

167

Estou lendo um livro sobre SQL. Nesse livro, há o termo Consulta Ad Hoc , que eu não entendo.

O que exatamente é uma consulta ad hoc?

zihado
fonte

Respostas:

225

Ad hoc é latim para "para esse fim". Você pode chamá-lo de uma consulta "on the fly" ou uma consulta "just so". É o tipo de consulta SQL que você digita vagamente onde precisa

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

... que é uma consulta totalmente diferente cada vez que a linha de código é executada, dependendo do valor de myId. O oposto de uma consulta ad hoc é uma consulta predefinida, como um Procedimento Armazenado, em que você criou uma única consulta para todo o objetivo generalizado de selecionar a partir dessa tabela (digamos) e passar o ID como uma variável.

David Hedlund
fonte
17
@ David Hedlund sua consulta está vulnerável a SQL injection attacks... Você deve usar o parâmetro.
Parid0kht 22/10
45
@Paridokht: Certamente. Não estou defendendo esse uso, estou explicando o conceito de uma consulta ad hoc, que era a questão.
David Hedlund 22/10
12
@DavidHedlund: Sim, eu entendo ... mas talvez seja melhor mencioná-lo em sua resposta, porque há usuários que leem isso e não têm idéia do ataque.
Parid0kht
46
Se um usuário lê e não tem idéia sobre a injeção de SQL, ele não está trabalhando em nada que possa ser do interesse do hacker. Não vamos ao extremo ...
Michal B.
7
Como desenvolvedor com anos de experiência agora, aprendi muitas coisas enquanto procurava algo completamente diferente do que procurava. Então, o IMHO adicionando uma frase como ' ... não se esqueça de fazer os controles e a higienização necessários para a minha ID aqui ' não causaria nenhum dano.
scaryguy
24

Uma consulta ad-hoc é uma consulta que não pode ser determinada antes do momento em que a consulta é emitida. Ele é criado para obter informações quando necessário e consiste em SQL dinamicamente construído, que geralmente é construído por ferramentas de consulta residentes na área de trabalho.

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

haltunbay
fonte
Então, se eu digitar uma consulta estática e executá-la uma vez, não é "ad hoc"?
precisa saber é o seguinte
1

Também quero adicionar que a consulta ad hoc é vulnerável a ataques de injeção de SQL. Devemos tentar evitar usá-lo e usar SQLs parametrizados ( como PreparedStatement em Java ).

xli
fonte
7
Uma consulta ad-hoc não é vulnerável à injeção de SQL. Uma consulta não parametrizada que aceita entrada do usuário é vulnerável à injeção de SQL.
Ben
@ Ben Uma consulta ad-hoc é sempre sem parâmetros. Não pode ser atacado por injeção de SQL se não expormos as variáveis ​​aos usuários; mas o ponto é que a consulta ad-hoc é arriscada para a injeção de SQL.
xli
1

Uma consulta ad-hoc é uma consulta que não pode ser determinada antes do momento em que a consulta é emitida. Ele é criado para obter informações quando necessário e consiste em SQL dinamicamente construído, que geralmente é construído por ferramentas de consulta residentes na área de trabalho. Uma consulta ad hoc não reside no computador ou no gerenciador do banco de dados, mas é criada dinamicamente, dependendo das necessidades do usuário de dados.

No SQL, uma consulta ad hoc é um comando / consulta de tipo fraco, cujo valor depende de alguma variável. Cada vez que o comando é executado, o resultado é diferente, dependendo do valor da variável. Ele não pode ser predeterminado e geralmente vem sob consulta SQL de programação dinâmica. Uma consulta ad hoc tem vida curta e é criada em tempo de execução.

Ketan Anand
fonte
1

Uma consulta Ad-hoc é aquela criada para fornecer um conjunto de registros específico de uma ou várias tabelas mescladas disponíveis no servidor DB. Essas consultas geralmente atendem a um propósito de uso único e podem não ser necessárias para serem incorporadas a qualquer procedimento armazenado para execução novamente no futuro.

Cenário ad-hoc : você recebe uma solicitação para um subconjunto específico de dados com um conjunto exclusivo de variáveis. Se não houver uma consulta pré-escrita que possa fornecer os resultados necessários, você deverá escrever uma consulta Ad-hoc para gerar os resultados do conjunto de registros.

Além de uma consulta Ad-hoc de uso único, existem procedimentos armazenados ; ou seja, consultas armazenadas na ferramenta de interface DB. Esses procedimentos armazenados podem ser executados em sequência dentro de um módulo ou macro para realizar uma tarefa predefinida sob demanda, em uma agenda ou acionada por outro evento.

Cenário de procedimento armazenado : Todo mês você precisa gerar um relatório do mesmo conjunto de tabelas e com as mesmas variáveis ​​(essas variáveis ​​podem ser valores predefinidos específicos, valores calculados como "final do mês atual" ou valores de entrada do usuário). Você criou o procedimento como uma consulta ad-hoc pela primeira vez. Após testar os resultados para garantir a precisão, você pode optar por implantar esta consulta. Você armazenaria a consulta ou série de consultas em um módulo ou macro para executar novamente conforme necessário.

PV22
fonte
0

Consultas ad hoc são aquelas que ainda não estão definidas e que não são necessárias regularmente, portanto não são incluídas no conjunto típico de relatórios ou consultas

user3134258
fonte
Você pode explicar mais sobre o que está escrevendo? Qual é o "conjunto típico"; você quer dizer código compilado?
Ben
0

Instruções ad-hoc são apenas instruções T-SQL de que possui uma cláusula Where e que a cláusula Where pode realmente ter um literal como:

Select * from member where member_no=285;

ou uma variável:

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

Uma consulta Ad-Hoc é:

  1. Pergunta pré-planejada.
  2. Pergunta pré-agendada.
  3. pergunta do estímulo do momento.
  4. Pergunta que não retornará resultados.
Ravi
fonte
O que isso significa em termos de SQL? Além disso, nem todas as "Perguntas que não retornam resultados". são ad hocs.
precisa saber é o seguinte
-5

A consulta ad hoc é o tipo de definição do computador. O que significa que esta consulta foi especialmente projetada para obter qualquer informação quando for necessária. Predefinido. consulte este https://www.youtube.com/watch?v=0c8JEKmVXhU

Sanyog Tiwari
fonte
1
Eu acho que "Predefinido" é o oposto de "ad hoc".
precisa saber é o seguinte
-6

No SQL Server, "Ad Hoc Query" também é usado para consultas distribuídas ad hoc. Essas são consultas ad hoc em outro servidor via OpenRowset ou OpenDatasource. As consultas distribuídas ad hoc são permitidas somente após a configuração. Esta é uma opção de configuração do servidor.

Expansão
fonte
não se trata de sql Server. a questão não era sobre uma solução entreprise particular, mas sim de uma compreensão geral do significado consultas ad hoc
arthur