본문 바로가기
DataBase/MsSql

MSSQL 저장 프로시저 vs 사용자 정의 함수 차이점

by 아우럼 2024. 6. 5.
반응형

Database 프로그래밍에서 중요한 역할을 하는 사용자 정의 함수와 저장 프로시저의 차이점을 알아보겠습니다.

 

프로시저하고 사용자 정의 함수는?

  • 프로시저, 사용자 정의 함수 코드의 반복적으로 작성된 코드를 간결하게 유지하는 데 많은 도움이 됩니다.
  • 프로시저, 사용자 정의 함수를 사용하면 코드의 재사용성 높이는 데 좋습니다.
  • 또한 조건문(IF, CASE)이나 반복문(WHILE)을 모두 사용할 수 있습니다.
  • 프로시저, 사용자 정의 함수의 차이는 있지만 값을 반환할 수 있습니다.

저장 프로시저 vs 사용자 정의 함수 차이점.

저장 프로시저.

  • 저장 프로시저는 데이터베이스 내의 데이터를 조작하고 처리하는 데 주로 사용합니다.
  • 예를 들어, 데이터를 삽입, 수정, 삭제하는 작업을 프로시저로 수행할 수 있습니다.
  • 성능 개선이 필요할 때, 프로시저는 쿼리 실행 속도를 향상하게 하는 데 도움이 됩니다. 
  • 프로시저는 트랜잭션을 관리하는 데 사용됩니다. 여러 쿼리를 하나의 트랜잭션으로 묶어서 원자성(Atomicity)을 보장할 수 있습니다.
  • 프로시저에서 사용하는 파라미터는 입력, 출력 모두 가능합니다.

사용자 정의 함수.

  • 함수는 특정 계산을 수행하거나 값을 변환하는 데 사용됩니다. 
  • 함수는 return 절을 반드시 사용해야 합니다.
  • 함수에서 사용하는 파라미터는 입력할 수 있습니다.
  • 사용자 정의 함수 안에서 프로시저를 호출할 수는 없음
  • 사용자 정의 함수는 SELECT, WHERE, HAVING 절 등에서 사용할 수 있습니다.
  • 사용자 정의 함수는 비결정적 함수를 사용할 수 없습니다.
  • 예를 들면 try-catch, newid(), delete, update, print 등을 사용하면 에러가 발생합니다.
  • 함수 호출은 쿼리의 성능을 저하할 수 있습니다.

 

저장 프로시저 vs 사용자 정의 함수 실행방법.

저장 프로시저 vs 사용자 정의 함수 소스 설명.

저장 프로시저 vs 사용자 정의 함수 소스 설명 입니다.
저장 프로시저 vs 사용자 정의 함수 소스 설명 입니다.

저장 프로시저 소스 및 실행방법.

-- DROP PROCEDURE [SP_PROCEDURE_AurumGuideForCompare] 
GO
CREATE PROCEDURE [SP_PROCEDURE_AurumGuideForCompare] 
	@ParamAurumId    INT
   ,@ParamAurumNm    VARCHAR(100) 
AS  
BEGIN 
	PRINT(@ParamAurumId); 
	DROP TABLE IF EXISTS AurumGuide_Compare;
	-- Create Sample Table 
	CREATE TABLE AurumGuide_Compare (
		AurumId           INT NOT NULL,
		AurumNm           VARCHAR(255)  NULL,
		AurumAge          INT  NULL,
		AurumDate         DATETIME
	);
	-- Create Sample Data
	INSERT INTO dbo.AurumGuide_Compare
		   (AurumId,AurumNm,AurumDate) 
	VALUES (@ParamAurumId, @ParamAurumNm,getdate()); 
	--A control statement
	IF(@ParamAurumId IS NOT NULL)
	BEGIN
		UPDATE dbo.AurumGuide_Compare
		  SET AurumAge = 100
		WHERE AurumId is not null;
	END
	-- Return Data
	SELECT AurumId,AurumNm,AurumAge,AurumDate 
	FROM AurumGuide_Compare; 
END

--  excute  PROCEDURE
EXECUTE [dbo].[SP_PROCEDURE_AurumGuideForCompare] '198','function_compare';

 

사용자 정의 함수 소스 및 실행방법.

-- DROP FUNCTION fn_AurumGuideForCompare;
GO
CREATE FUNCTION fn_AurumGuideForCompare (@AurumId int)
RETURNS @Return_AurumGuide  TABLE
(	AurumId int,
	AurumNm varchar(255) NULL 
) AS
BEGIN
	/*
	 PRINT(@ParamAurumId);
	 DELETE FROM AurumGuide_Compare;
	 INSERT AurumGuide_Compare(AurumId) values(100);
	 UPDATE AurumGuide_Compare SET AurumId=1;
	 SELECT newid();
   */
	IF(@AurumId IS NOT NULL)
	BEGIN
		INSERT @Return_AurumGuide
		SELECT AurumId,AurumNm
		  FROM AurumGuide_Compare af	 
		 WHERE af.AurumId  =  @AurumId;
	END 
	RETURN;
END;
GO
-- FUNCTION EXE
SELECT *
  FROM DBO.fn_AurumGuideForCompare('10');
-----------------------------------------------
GO
--DROP FUNCTION DBO.AurumGuide_scalarCompare;
GO
CREATE FUNCTION DBO.AurumGuide_scalarCompare (
	@Aurum_Param1 varchar(20),
	@Aurum_Param2 varchar(20) 
)
RETURNS VARCHAR(100)
AS
BEGIN
	DECLARE @returnStr varchar(100);
	SET @returnStr= @Aurum_Param1 + @Aurum_Param2;
	RETURN @returnStr
END; 
GO
-- FUNCTION EXE
SELECT DBO.AurumGuide_scalarCompare('Aurum','Guide');

 

반응형