반응형
Database 프로그래밍에서 중요한 역할을 하는 사용자 정의 함수와 저장 프로시저의 차이점을 알아보겠습니다.
프로시저하고 사용자 정의 함수는?
- 프로시저, 사용자 정의 함수 코드의 반복적으로 작성된 코드를 간결하게 유지하는 데 많은 도움이 됩니다.
- 프로시저, 사용자 정의 함수를 사용하면 코드의 재사용성 높이는 데 좋습니다.
- 또한 조건문(IF, CASE)이나 반복문(WHILE)을 모두 사용할 수 있습니다.
- 프로시저, 사용자 정의 함수의 차이는 있지만 값을 반환할 수 있습니다.
저장 프로시저 vs 사용자 정의 함수 차이점.
저장 프로시저.
- 저장 프로시저는 데이터베이스 내의 데이터를 조작하고 처리하는 데 주로 사용합니다.
- 예를 들어, 데이터를 삽입, 수정, 삭제하는 작업을 프로시저로 수행할 수 있습니다.
- 성능 개선이 필요할 때, 프로시저는 쿼리 실행 속도를 향상하게 하는 데 도움이 됩니다.
- 프로시저는 트랜잭션을 관리하는 데 사용됩니다. 여러 쿼리를 하나의 트랜잭션으로 묶어서 원자성(Atomicity)을 보장할 수 있습니다.
- 프로시저에서 사용하는 파라미터는 입력, 출력 모두 가능합니다.
사용자 정의 함수.
- 함수는 특정 계산을 수행하거나 값을 변환하는 데 사용됩니다.
- 함수는 return 절을 반드시 사용해야 합니다.
- 함수에서 사용하는 파라미터는 입력할 수 있습니다.
- 사용자 정의 함수 안에서 프로시저를 호출할 수는 없음
- 사용자 정의 함수는 SELECT, WHERE, HAVING 절 등에서 사용할 수 있습니다.
- 사용자 정의 함수는 비결정적 함수를 사용할 수 없습니다.
- 예를 들면 try-catch, newid(), delete, update, print 등을 사용하면 에러가 발생합니다.
- 함수 호출은 쿼리의 성능을 저하할 수 있습니다.
저장 프로시저 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');
반응형