임시 쿼리 란 무엇입니까?


167

SQL에 관한 책을 읽고 있습니다. 그 책에는 Ad Hoc Query 라는 용어가 있는데, 이해가 안됩니다.

임시 쿼리 란 정확히 무엇입니까?

답변:


225

애드혹 은 "이 목적을 위해"라틴어입니다. "즉석"쿼리 또는 "그냥"쿼리라고 부를 수 있습니다. 필요한 곳에서 느슨하게 입력하는 SQL 쿼리의 종류입니다.

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

...의 값에 따라 코드 줄이 실행될 때마다 완전히 다른 쿼리입니다 myId. 임시 쿼리의 반대편에는 스토어드 프로 시저와 같은 사전 정의 된 쿼리가 있습니다.이 프로 시저에서는 해당 테이블에서 선택하는 일반적인 일반 목적을 위해 단일 쿼리를 작성하고 ID를 변수로 전달합니다.


17
@David Hedlund 쿼리가 취약합니다 SQL injection attacks... 매개 변수를 사용해야합니다.
Parid0kht

45
@Paridokht : 물론입니다. 나는 그 사용을 옹호하지 않고, 임시 질문의 개념을 설명하고 있는데, 이것이 질문이었습니다.
David Hedlund

12
@DavidHedlund : 예, 이해합니다 ..이 글을 읽고이 공격에 대해 전혀 모르는 사용자가 있기 때문에 답에 언급하는 것이 좋습니다.
Parid0kht

46
사용자가이를 읽고 SQL 삽입에 대한 아이디어가 없으면 해커가 관심을 가질 수있는 작업을 수행하고 있지 않습니다. 극단으로 가지 않자 ...
Michal B.

7
수년간의 경험을 가진 개발자로서 저는 찾고있는 것과 완전히 다른 것을 찾고있는 동안 많은 것을 배우고 있습니다. 따라서 IMHO와 같은 문장을 추가하는 IMHO는 ' ... 여기에 myId에 필요한 제어 및 위생 처리를 잊지 마십시오 '는 아무런 해를 끼치 지 않습니다.
scaryguy


1

또한 임시 쿼리는 SQL 인젝션 공격에 취약하다는 점도 덧붙입니다. 이를 사용하지 말고 대신 매개 변수화 된 SQL을 사용하십시오 ( 예 : Java의 PreparedStatement ).


7
임시 쿼리는 SQL 주입에 취약 하지 않습니다 . 사용자 입력을 허용하는 매개 변수화되지 않은 쿼리는 SQL 주입에 취약합니다.
Ben

@Ben 임시 쿼리는 항상 매개 변수가 없습니다. 변수를 사용자에게 노출시키지 않으면 SQL 주입 공격을받을 수 없습니다. 그러나 요점은 임시 쿼리가 SQL 인젝션에 위험하다는 것입니다.
xli

1

임시 쿼리는 쿼리가 발행되기 전에 결정될 수없는 쿼리입니다. 필요할 때 정보를 얻기 위해 작성되며 일반적으로 데스크탑 상주 조회 도구로 구성되는 동적으로 구성된 SQL로 구성됩니다. 임시 조회는 컴퓨터 나 데이터베이스 관리 프로그램에 상주하지 않지만 데이터 사용자의 요구에 따라 동적으로 작성됩니다.

SQL에서 임시 쿼리는 느슨하게 입력 된 명령 / 쿼리이며 값은 변수에 따라 다릅니다. 명령이 실행될 때마다 변수 값에 따라 결과가 달라집니다. 미리 정의 할 수 없으며 일반적으로 동적 프로그래밍 SQL 쿼리에서 제공됩니다. 임시 쿼리는 수명이 짧고 런타임에 만들어집니다.


1

애드혹 쿼리는 하나 또는 다수의 DB 서버에서 사용할 수있는 테이블을 병합에서 특정 레코드를 제공하기 위해 만든 것입니다. 이러한 쿼리는 일반적으로 단일 용도로 사용되므로 나중에 다시 실행하기 위해 저장 프로 시저에 통합하지 않아도됩니다.

임시 시나리오 : 고유 한 변수 세트를 사용하여 특정 데이터 서브 세트에 대한 요청을받습니다. 필요한 결과를 제공 할 수있는 미리 작성된 쿼리가 없으면 임시 쿼리를 작성하여 레코드 세트 결과를 생성해야합니다.

일회용 임시 쿼리 외에 저장 프로 시저가 있습니다 . 즉, DB 인터페이스 도구 내에 저장된 쿼리입니다. 이러한 저장 프로시 저는 모듈 또는 매크로 내에서 순서대로 실행되어 요청시, 일정에 따라 또는 다른 이벤트에 의해 트리거되는 미리 정의 된 작업을 수행 할 수 있습니다.

저장 프로 시저 시나리오 : 매월 동일한 테이블 세트에서 동일한 변수로 보고서를 생성해야합니다 (이러한 변수는 사전 정의 된 특정 값, "현재 달의 끝"과 같은 계산 된 값 또는 사용자 입력 값일 수 있음). 처음에는 임시 쿼리로 프로 시저를 작성했습니다. 정확성을 보장하기 위해 결과를 테스트 한 후이 쿼리를 배포하도록 선택할 수 있습니다. 그런 다음 필요에 따라 쿼리 또는 일련의 쿼리를 모듈 또는 매크로에 저장하여 다시 실행할 수 있습니다.


0

임시 쿼리는 아직 정의되지 않았지만 정기적으로 필요하지 않은 쿼리이므로 일반적인 보고서 나 쿼리에는 포함되지 않습니다.


더 많이 쓰고있는 것을 설명 할 수 있습니까? "일반 세트"는 무엇입니까? 컴파일 된 코드를 의미합니까?
Ben

0

Ad-hoc Statments는 Where Clause가 있고 Where 절이 실제로 다음과 같은 리터럴을 가질 수 있다는 T-SQL 문입니다.

Select * from member where member_no=285;

또는 변수 :

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

-4

임시 쿼리는 다음과 같습니다.

  1. 미리 계획된 질문.
  2. 미리 예약 된 질문.
  3. 순간 질문의 박차.
  4. 결과를 반환하지 않는 질문입니다.

이것이 SQL이라는 용어에서 무엇을 의미합니까? 또한 "모든 결과를 반환하지 않는 질문"도 있습니다. ad hocs입니다.
jumxozizi


-6

SQL Server에서 "Ad Hoc Query"는 Ad Hoc Distributed Queries에도 사용됩니다. OpenRowset 또는 OpenDatasource를 통한 다른 서버의 임시 쿼리입니다. Ad Hoc Distributed Queries는 구성 후에 만 ​​허용됩니다. 서버 구성 옵션입니다.


이것은 SQL Server에 관한 것이 아닙니다. 문제는 특정 기업가 솔루션에 대한 것이 아니라 임시 쿼리의 의미에 대한 일반적인 이해에 관한 것이 었습니다
arthur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.