- 리턴값이 있을수도 없을수도 있다. (IN 또는 OUT)
- 리턴값이 여러개 있을 수 있다. (OUT 여러개)
- 서버에서 실행되기 때문에 속도가 빠르다.
- CALL 프로시저명() 또는 EXECUTE 프로시저명()
프로시저 생성
- DEFINER: 접근 권한
- PROCEDURE [프로시저이름]
- 매개변수 + 타입
- SET 변수설정
- 기호가 없으면 프로시저 실행이 끝나면 초기화
- @ 있으면 프로시저가 끝나도 계속 유지
- CONCAT(): 문자열 합치기
- PREPARE: 실행준비 (한번만 해주면 계속 EXECUTE 해줄 수 있음)
- EXECUTE: PREPARE 된 것을 실행
프로시저의 기본 형태 1
CREATE DEFINER=`DB아이디`@`%` PROCEDURE `프로시저명`
BEGIN
SELECT *
FROM 테이블명
END
프로시저의 기본 형태 2
CREATE OR REPLACE PROCEDURE "프로시저명" (
PARAMETER IN OUT DATATYPE
)
IS
BEGIN
EXCEPTION
END;
프로시저 인자값 및 파라미터 받을 때
CREATE DEFINER=`DB아이디`@`%` PROCEDURE `프로시저명`(
IN 변수명 자료형
OUT 변수명 자료형
)
BEGIN
SELECT *
FROM 테이블명
WHERE 컬럼명 = 변수명
END
프로시저 변수 할당
CREATE DEFINER=`DB아이디`@`%` PROCEDURE `프로시저명`(
IN 변수명 자료형
)
BEGIN
SET @v_code = '123';
SELECT *
FROM 테이블명
WHERE 컬럼 = 변수명 AND
컬럼 = @v_code
END
프로시저 조건문 사용하기 IF, ELSEIF, OR, AND..
CREATE DEFINER = 'DB아이디'@'%' PROCEDURE '프로시저명'(
IN 변수명 자료형
)
BEGIN
SET @v_code = '123';
IF @v_code != '' THEN
SELECT *
FROM 테이블명
WHERE 컬럼 = 변수명 AND
컬럼 = @v_code
END IF;
END
프로시저 생성 예제 1
CREATE DEFINER = 'root'@'%' PROCEDURE test_prc(
id int(10)
)
BEGIN
SET @t1 = CONACAT('SELECT * FROM test_', id);
PREPARE s FROM @t1;
EXECUTE s;
END
프로시저 생성 예제 2
CREATE OR REPLACE PROCEDURE update_sal
( v_empno IN NUMBER )
IS
BEGIN
UPDATE emp
SET sal = sal * 1.1
WHERE empno = v_empno;
END update_sal;