저장 프로시저
저장 프로시저는 SQL 명령어들의 집합이거나, 데이터베이스에 저장된 특정 이름을 가진 서브프로그램이라고 할 수 있습니다. 저장 프로시저가 수행하는 과정은 입력 매개변수를 받아들이고, 출력 매개변수의 형태로 값을 호출자에게 반환하며, 트리거나 다른 저장 프로시저와 같은 프로그램에 의해 실행되는 데이터베이스에서의 데이터 처리 작업을 수행하는 것입니다. 저장 프로시저 사용의 장점은 다음과 같습니다.
- 애플리케이션의 성능을 향상시킵니다. 생성된 저장 프로시저는 애플리케이션이 보내는 컴파일되지 않은 SQL 명령어보다 더 빠르게 실행되기 때문입니다.
- 데이터베이스와 애플리케이션 간의 네트워크 트래픽을 줄여줍니다. 컴파일되지 않은 SQL을 보낼 필요가 없기 때문입니다.
- 모든 애플리케이션에서 반복적이고 투명하게 사용할 수 있습니다.
그럼에도 불구하고 저장 프로시저 사용에는 단점도 있습니다.
- 디버깅이 불가능합니다.
- 서버 하드웨어의 부하가 증가합니다.
- 작성이 쉽지 않고 특정 지식이 필요합니다.
저장 프로시저의 구문
저장 프로시저에 있는 구문
- 저장 프로시저 작성 구문
DELIMITER // CREATE PROCEDURE 프로시저_이름() BEGIN SQL 쿼리 END // DELIMITER ;
- 저장 프로시저 호출 구문
CALL 프로시저_이름()
- 저장 프로시저에서 변수 선언 구문
DECLARE 변수_이름 데이터타입(길이) DEFAULT 값;
- 매개변수가 있는 저장 프로시저의 구문
매개변수에는 세 가지 모드가 있습니다.
- IN : 매개변수의 기본 형태로, 저장 프로시저 내의 모든 변경 사항이 매개변수에 영향을 미치지 않습니다.
- OUT : 매개변수 값을 변경한 후 호출자에게 다시 보내는 모드입니다.
- INOUT : IN과 OUT을 결합한 모드입니다.
매개변수가 있는 저장 프로시저를 정의하는 구문 예시:
DELIMITER // CREATE PROCEDURE 프로시저_이름([모드] [매개변수] [데이터타입]) BEGIN SQL 쿼리 END // DELIMITER ;매개변수가 있는 저장 프로시저를 호출하는 구문 예시:
CALL 프로시저_이름([매개변수_값])
커서
커서는 특정 SQL 문의 처리를 담기 위해 사용되는 데이터베이스의 객체로, 하나 이상의 행이나 레코드를 포함하는 쿼리 결과를 담는 변수라고 할 수 있습니다. 커서는 테이블의 행 수만큼 반복(이터레이션)을 수행할 수 있습니다. 커서에는 몇 가지 속성이 있습니다.
- 업데이트가 불가능합니다 (읽기 전용).
- 커서는 한 방향으로만 진행됩니다 (스크롤 불가).
- 커서가 참조하는 테이블을 업데이트하는 것은 원치 않는 결과를 초래할 수 있으므로 권장되지 않습니다 (비민감성).
저장 프로시저에서 커서의 구문
커서에 있는 구문
커서를 생성하는 데는 여러 단계가 있습니다.
- Declare : 커서를 선언하는 단계. 구문은 다음과 같습니다.
DECLARE 커서_이름 CURSOR FOR SELECT_문;
- Open : 커서를 열거나 활성화하는 단계. 구문은 다음과 같습니다.
OPEN 커서_이름;
- Fetch : 커서에서 데이터를 가져와 변수에 저장하는 단계. 구문은 다음과 같습니다.
FETCH 커서_이름 INTO 변수_목록
- Close : 커서를 비활성화하는 단계. 구문은 다음과 같습니다.
CLOSE 커서_이름
저장 프로시저와 커서의 차이점
저장 프로시저와 커서의 차이점은 저장 프로시저는 MySQL의 선언 명령어들만 담고 있는 반면, 커서는 쿼리 결과를 담고 동시에 그 쿼리 결과에 대한 포인터 역할을 한다는 것입니다. 이로 인해 커서는 저장 프로시저로는 할 수 없는 복잡한 명령(예: 레코드에 대한 반복 작업)을 수행할 수 있습니다.

