dynamic sql 예제

네이티브 동적 SQL 또는 DBMS_SQL 패키지를 사용하는 경우 바인딩 변수를 사용하면 Oracle에서 여러 SQL 문에 대해 단일 커서를 공유할 수 있으므로 바인딩 변수를 사용하여 성능을 향상시킬 수 있습니다. 이 예제에서는 sp_executesql을 사용할 이유가 없습니다. 그러나 요점은 sp_executesql이 OUTPUT 매개 변수를 처리 할 수 있다는 것입니다. DBMS_SQL 패키지는 클라이언트 쪽 프로그램에서 지원되지만 네이티브 동적 SQL은 지원되지 않습니다. 클라이언트 측 프로그램에서 DBMS_SQL 패키지를 호출할 때마다 PL/SQL 원격 프로시저 호출(RPC)으로 변환됩니다. 이러한 호출은 변수를 바인딩하거나 변수를 정의하거나 문을 실행해야 할 때 발생합니다. 저장 프로시저의 동적 SQL은 단일 Transact-SQL 문 또는 변수에 저장되고 SQL 명령을 사용하여 실행되는 명령 집합입니다. SQL Server에서 이를 구현하는 방법에는 여러 가지가 있을 수 있습니다. 이 문서에서는이 작업을 수행하는 좋은 방법을 보여 줄 것입니다. 자세한 설명을 시작하기 전에 « 동적 SQL을 사용할 시기 »를 알려드리겠습니다. 정적 SQL이 모든 프로그래밍 요구 사항을 충족할 것이라고 말할 수는 없습니다. 동적 SQL은 다른 검색 매개 변수를 기반으로 레코드 집합을 검색해야 할 때 필요합니다.

예를 들어 예를 들어 다른 WHERE 절을 기반으로 다른 SELECT 문을 실행해야 하는 직원 검색 화면 또는 범용 보고서라고 합니다. DBMS_SQL 패키지는 SQL 문을 동적으로 실행하는 API를 제공하는 PL/SQL 라이브러리입니다. DBMS_SQL 패키지에는 커서를 열고, 커서를 구문 분석하고, 바인딩을 제공하는 등의 절차가 있습니다. DBMS_SQL 패키지를 사용하는 프로그램은 동적 SQL 작업을 수행하기 위해 이 패키지를 호출합니다. 우리가 볼 수 있듯이, EXEC 문은 nvarchar 변수에 저장 되는 쿼리를 동적으로 실행 하는 데 사용 됩니다. 쿼리할 테이블을 동적으로 선택하는 예제로 돌아가보겠습니다. 이에 대한 해결책은 이 절차와 같을 수 있습니다: EXECUTE IMMEDIATE 문은 동적 단일 행 쿼리를 수행할 수 있습니다. USING 절에서 바인딩 변수를 지정하고 결과 행을 문의 INTO 절에 지정된 대상으로 가져올 수 있습니다. 예를 들어 다음 프로시저에서는 a_hint라는 변수를 사용하여 사용자가 SELECT 문에 힌트 옵션을 전달할 수 있습니다. 이 예제를 계속 하면 동적 SQL을 사용 하 여 동일한 코드: 문자열의 첫 번째 섹션(`총`)에서만 보고: 다음 예제에서는 OUTPUT 매개 변수를 사용 하 여 SELECT 문에 의해 생성 된 결과 집합을 저장 @SQLString 매개 변수. 그런 다음 OUTPUT 매개 변수의 값을 사용하는 두 개의 SELECT 문이 실행됩니다.

이 문서에서는 실제 예제 및 샘플 프로시저 « 저장 프로시저에서 동적 SQL을 빌드하고 실행하는 방법 »을 설명합니다. PL/SQL 인터프리터에 대한 기본 지원이 있기 때문에 PL/SQL의 네이티브 동적 SQL은 정적 SQL의 성능에 비교적 많이 수행됩니다. 네이티브 동적 SQL을 사용하는 프로그램은 DBMS_SQL 패키지를 사용하는 프로그램보다 훨씬 빠릅니다. 일반적으로 네이티브 동적 SQL 문은 동등한 DBMS_SQL 호출보다 1.5~3배 더 나은 성능을 발휘합니다. (성능 향상은 응용 프로그램에 따라 다를 수 있습니다.) DBMS_SQL 패키지는 네이티브 동적 SQL에 비해 다음과 같은 이점을 제공합니다. 다음 Transact-SQL CREATE TABLE 문을 사용하여 데이터베이스 내에서 직원 테이블을 만들 수 있습니다. 일부 응용 프로그램에서는 데이터베이스 서버에 대해 발급되는 쿼리의 동적 특성 때문에 하드 코딩된 SQL 문을 갖는 것이 매력적이지 않습니다.

Dark Bugsydynamic sql 예제