매개 변수의 사용
IN 입력_매개 변수_이름 데이터_형식 CALL 프로시저_이름(전달 값); OUT 출력_매개 변수_이름 데이터_형식 또는 SELECT ... INTO
예시)
drop procedure if exists userProc1; delimiter $$ create procedure userProc1(in username varchar(14), username2 varchar(14)) begin select * from emp where first_name = username && last_name = username2; end $$ delimiter ; call userProc1('Teiji', 'Peir');
drop procedure if exists userProc1; delimiter $$ create procedure userProc1(in username varchar(14), in username2 varchar(14)) begin select * from emp where first_name = username && last_name = username2; end $$ delimiter ; call userProc1('Teiji', 'Peir');
스토어드 프로시저의 특징
1) MySQL의 성능을 향상시킬 수 있다.
- 긴 코드로 구현된 쿼리를 실행하게 되면, 클라이언트에서 서버로 쿼리의 모든 텍스트가 전송되어야 한다.
-> 다른 DBMS에서는 스토어드 프로시저가 처음 호출 시에 1회만 컴파일된후, 메모리에 로딩된다. 그 이후로는 컴파일을 다시 하지 않고 메모리에 저장된 내용이 호출되므로 상당한 성능 향상이 된다. 하지만 MySQL의 스토어드 프로시저는 호출할 떄마다 컴파일 되기 때문에 다른 DBMS처럼 성능 향상이 많이 되지는 않지만 네트워크 부하를 줄일수 있다.
2) 유지관리가 편하다
C#이나 Java 등의 클라이언트 응용프로그램에서 직접 SQL문을 작성하지 않고 스토어드 프로시저 이름만 호출하도록 설정한다.
3) 모듈식 프로그래밍이 가능하다.
한번 스토어드 플고시저를 생성해 놓으면 언제든지 실행이가능하다.
4) 보안을 강화할 수 있다.
사용자 별로 테이블에 접근 권한을 주지 않고 스토어드 프로시저에만 접근 권한을 줌으로써 좀 더 보안을 강화할 수 있다.
스토어드 함수
delimiter $$ create function 스토어드_함수이름(파라미터) returns 반환형식 begin 로직프로그램 return 반환값; end $$ delimiter ; select 스토어드_함수이름(파라미터);
에러 : Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
대응 :
SET GLOBAL log_bin_trust_function_creators = 1;
drop function if exists userFunc; delimiter $$ create function userFunc(value1 INT, value2 INT) returns INT begin return value1 * value2; end $$ delimiter ; select userFunc(2,3);
반응형
'DB > MYSQL' 카테고리의 다른 글
FULLTEXT Index, 파티션 (0) | 2020.02.01 |
---|---|
커서, 트리거 (0) | 2020.01.31 |
인덱스 (0) | 2020.01.30 |
제약조건 및 키(Key) (0) | 2020.01.29 |
JOIN, UNION, NOT IN, IN, 스토어드, PREPARE EXECUTE (0) | 2020.01.29 |