은은하게 코드 뿌시기

MSSQL - sp_executesql / Oracle 본문

Database -Mysql,Oracle

MSSQL - sp_executesql / Oracle

은은하게미친자 2023. 5. 9. 16:41
728x90

 

sp_executesql은 SQL Server에서 동적 SQL 문을 실행하는 데 사용되는 시스템 저장 프로시저입니다.

동적 SQL은 실행 중에 문자열로 구성된 SQL 문을 생성하고 실행하는 것을 의미합니다. 예를 들어, 조건에 따라 다른 WHERE 절을 사용하는 쿼리를 작성하고자 할 때, 동적 SQL을 사용할 수 있습니다.

sp_executesql을 사용하면 동적 SQL을 실행하기 전에 입력 매개 변수의 데이터 형식을 정의할 수 있습니다. 이렇게 하면 SQL Server가 매개 변수를 문자열로 변환하기 전에 데이터 형식을 검사할 수 있습니다. 이렇게 하면 SQL Server에서는 데이터 형식 변환 오류를 방지할 수 있습니다.

DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);

DECLARE @City nvarchar(75);
SET @City = N'London';

SET @SQLString = N'SELECT * FROM Person.Address WHERE City = @CityParm';
SET @ParmDefinition = N'@CityParm nvarchar(75)';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @CityParm = @City;

이 쿼리는 @City 매개 변수를 사용하여 City 열에 대한 조건을 동적으로 생성하고 실행합니다. sp_executesql을 사용하여 @City 매개 변수의 데이터 형식을 nvarchar(75)로 정의하였기 때문에 SQL Server에서는 데이터 형식 변환 오류를 방지할 수 있습니다.

 

 

오라클로 변환하려면 어떻게 해야할까?

오라클에서는 EXECUTE IMMEDIATE문이 문자열을 실행하는 데 사용되며, 실행될 쿼리문에 바인드 변수를 포함할 수 있습니다. EXECUTE IMMEDIATE는 문자열을 파싱할 때 자료형을 인식하기 때문에, 자동으로 형변환을 수행합니다. 따라서 오라클에서는 sp_executesql과 같은 함수가 필요하지 않습니다.

INTO 구문은 결과를 저장할 변수를 지정합니다. USING 구문은 바인드 변수에 값을 바인딩합니다

DECLARE
  SQLString VARCHAR2(500);
  City VARCHAR2(75) := 'London';
  Result SYS_REFCURSOR;
BEGIN
  SQLString := 'SELECT * FROM Person.Address WHERE City = :CityParm';
  OPEN Result FOR SQLString USING City;
  -- 여기서 Result 변수를 사용하여 결과 처리
END;



저장할 변수가 여러개 인경우..

DECLARE
  SQLString VARCHAR2(500);
  City VARCHAR2(75) := 'London';
  Street VARCHAR2(100);
  ZipCode VARCHAR2(10);
BEGIN
  SQLString := 'SELECT Street, ZipCode FROM Person.Address WHERE City = :CityParm';
  EXECUTE IMMEDIATE SQLString INTO Street, ZipCode USING City;
  -- 여기서 Street, ZipCode 변수를 사용하여 결과 처리
END;

 

728x90
Comments