Skip to content

Latest commit

 

History

History
103 lines (85 loc) · 2.33 KB

11. SQL 프로시저.md

File metadata and controls

103 lines (85 loc) · 2.33 KB

SQL 프로시저(23. 12. 15)

SQL 루틴

  • SQL 프로시저 언어 구문을 포함하여 SQL로만 로직이 구현된 루틴
  • 작성시 사용되는 CREATE 내에 해당 루틴-본문 로직을 포함함
  • SQL 프로시저, SQL 함수 등을 작성할 수 있음
  • 모두 SQL에서 구현되지만 각 루틴 함수 타입에는 다른 기능이 있음
  • SQL 루틴은 CREATE 문을 사용
  • SQL 루틴에서 함수는 반드시 값을 반환해야 한다.
  • ALTER 문을 사용하여 SQL 루틴 수정
    • DBMS에 따라 ALTER를 허용하지 않는 경우가 있음
  • DROP 문을 사용하여 SQL 루틴 삭제

SQL 프로시저

SQL 루틴은 SQL 프로시저 언어(SQL Procedural Language) statement를 포함하여 SQL로만 로직이 구현되어 있는 루틴

  • SQL 루틴은 SQL 호출 루틴(SQL Invoked-routine)은 프로시저(Procedure) 또는 함수(Function)의 일반적인 이름
  • SQL 에서 제공하는 프로그래밍 기능
  • 쿼리문을 마치 하나의 메소드 형식으로 제작

루틴의 장점

  • 유연성
  • 효율성
  • 깔끔
  • 공유

MySQL

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확장이 매우 힘들다.