Closed kihyuk-sung closed 2 years ago
MySQL에서는 절차적인 처리를 위해
스토어드 프로그램
을 이용할 수 있다.
스토어드 프로그램
스토어드 프로그램 장점
스토어드 프로그램 단점
스토어드 프로시저
스토어드 함수
트리거
이벤트
스토어드 프로그램 본문
@
p297, 자세한 설명은 생략한다.
유지보수하기에 좋지 않다고 생각하기에 차라리 JPA 를 공부하는게 낫지 않을까 라는 생각이 들었다.
CREATE PROCEDURE
여러 쿼리를 하나의 그룹으로 묶어서 독립적으로 실행
CREATE FUNCTION
하나의 SQL 문장으로 불가능한 기능을 하나의 SQL 문장으로 구현하려 함
CREATE TRIGGER
미리 정의해둔 작업을 자동으로 실행
CREATE EVENT
특정 시간에 스토어드 프로그램을 실행할 수 있는 스케줄러 기능
공통으로 사용하는 제어문들
BEGIN START TRANSACTION; ... END
DECLARE
변수IF ... ELSEIF .... ELSE ... END IF
CASE WHEN ... THEN ... ELSE ... END CASE
loop_name: LOOP ... END LOOP;
, WHILE ... END WHILE
-- 생성
CREATE PROCEDURE sp_sum (IN param1 INTEGER, INOUT param2 INTEGER, OUT param3 INTEGER)
BEGIN
SET param3 = param1 + param2
SET param2 = param2 + 1
END ;;
-- 삭제
DROP PROCEDURE sp_sum
-- 수정
ALTER PROCEDURE sp_sum SQL SECURITY DEFINER;
파라미터 타입
명령의 끝을 알려주는 종료문자
;
);;
, //
연속된 문자열로 보통 설정@result
)
SET @param2:=0; -- INOUT 세션변수
SET @result:=0; -- OUT 세션변수
CALL sp_sum(1,@param2,@result); -- 프로시저 호출
SELECT @result; -- 결과 조회
사용
SELECT dept_no, sf_getRecentEmp(dept_no)
FROM dept_emp
GROUP BY dept_no;
생성
CREATE FUNCTION sf_sum(param1 INTEGER, param2 INTEGER)
RETURNS INTEGER
BEGIN
DECLARE param3 INTEGER DEFAULT 0;
SET param3 = param1 + param2;
RETURN param3;
END;;
변경
ALTER FUNCTION sf_sum SQL SECRUITY DEFINER;
삭제
DROP FUNCTION sf_sum;
SELECT sf_sum(1,2);
애플리케이션 <-> 데이터베이스 간의 네트워크 경유시간 >> 쿼리 실행시간
인 경우에 유리2명의 사원 번호만 SELECT하고 문자열로 결합하려면 스토어드 함수없이 어떻게?
Q) @Scheduled
vs cron?
Q) 쉘 스크립트 vs 파이썬 및 Golang 스크립트, 쉘 스크립트 활용 전망?
Q) RDB가 아니라면, MongoDB 에서는?
SQL의 문법을 확장해서 스토어드 프로그램의 기능을 일부 포함할 정도가 된다면 사용할만할 것 같다.