- SQL 프로시저 언어 구문을 포함하여 SQL로만 로직이 구현된 루틴
- 작성시 사용되는 CREATE 내에 해당 루틴-본문 로직을 포함함
- SQL 프로시저, SQL 함수 등을 작성할 수 있음
- 모두 SQL에서 구현되지만 각 루틴 함수 타입에는 다른 기능이 있음
- SQL 루틴은 CREATE 문을 사용
- SQL 루틴에서 함수는 반드시 값을 반환해야 한다.
- ALTER 문을 사용하여 SQL 루틴 수정
- DBMS에 따라 ALTER를 허용하지 않는 경우가 있음
- DROP 문을 사용하여 SQL 루틴 삭제
SQL 루틴은 SQL 프로시저 언어(SQL Procedural Language) statement를 포함하여 SQL로만 로직이 구현되어 있는 루틴
- SQL 루틴은 SQL 호출 루틴(SQL Invoked-routine)은 프로시저(Procedure) 또는 함수(Function)의 일반적인 이름
- SQL 에서 제공하는 프로그래밍 기능
- 쿼리문을 마치 하나의 메소드 형식으로 제작
루틴의 장점
- 유연성
- 효율성
- 깔끔
- 공유
MySQL 에서 파라미터를 사용하는 저장 프로시저의 예
CREATE PROC GetAricraft (
@id int
)
AS
SELECT *
FROM Aircraft
WHERE
AircraftNo = @id
사용자 추가 저장 프로시저
CREATE PROCEDURE AddUser
@userid varchar(10),
@username varchar(10),
@useremail varchar(50),
@usernickname varchar(15)
AS
DECLARE @maxno int
SELECT @maxno = MAX(UserNo) FROM Users
INSERT INTO Users VALUES(@maxno + 1, @userid, @username, @useremail, @usernickname)
GO
가장 큰 UserNo를 return 하는 프로시저
CREATE FUNCTION GetMaxUserNo()
RETURNS int
AS
BEGIN
RETURN(SELECT max(UserNo) FROM Users)
END
GO
출력 파라미터를 사용하는 저장 프로시저
DELIMITER $$
CREATE PROCEDURE GetArticle(
IN m_ArticleNo int,
OUT m_Title varchar(300),
OUT m_Contents text,
OUT m_WriterNickName varchar(15),
OUT m_WriteDate datetime
)
BEGIN
SELECT
Title, Contents, UserNickName, WriteDate
INTO m_Title, m_Contents, m_WriterNickName, m_WriteDate
FROM
Article AS a INNER JOIN Users AS u ON a.WriterNo = u.UserNo
WHERE
ArticleNo = m_ArticleNo;
END $$
DELIMITER ;
- 처리성능이 낮다
- 디버깅 어려움
- DB확장이 매우 힘들다.