본문 바로가기

DB

[MySQL] PL

PL (Procedural Language)

  • sql을 function으로 만들어 놓은 것.
  • SQL을 확장한 순차적 언어
  • → procedure(처리자), Function, Trigger
  • 변수, 제어문(if, while, loop)

 

-- autocommit 확인
select @@autocommit;

-- autocommit off
set autocommit = false;

autocommit 설정. 설정했다가 mysql 껐다가 키면 다시 초기화 되어있다.

 

-- 변수
set @counter = 10;
select @counter;

set @message = '하이';
select @message;

set @height = 178.3 + 11;
select @height;

변수 설정

 

procedure 형식

delimiter $$
create procedure 프로시저명 ( IN 매개변수명 자료형, OUT 매개변수명 자료형 )
begin
         쿼리문 + 제어처리문
end$$
delimiter ;
  • delimiter 뒤 ; 사이에 공백이 필요함
  • IN ↔ OUT

 

procedure 생성

delimiter $$
create procedure sp_hello_world ()
begin
	-- 프로시저 안에 변수 선언할 때 declare 붙여야 함
	declare message varchar(20);
	set message := ' hello PL ';
	select concat('message = ', message);
end$$
delimiter ;
delimiter //
create procedure myproc(in inum int, out onum int)
begin
	select inum;
	set onum = 333;
end;
//
delimiter ;
delimiter //

create procedure add_dept(in deptno int, in deptname varchar(30), in deptloc int)
begin
	-- error checking
	declare exit handler for 1365
	begin
		select 'insert fail';
	end;
	insert into departments(department_id, department_name, location_id)
	values(deptno, deptname, deptloc);
    
end ;
//
delimiter ;

 

procedure 삭제

-- procedure 삭제
drop procedure if exists sp_hello_world;

 

procedure 호출

-- procedure 호출
call sp_hello_world();

call myproc(123, @outNum);
select @outNum;
call add_dept(300, '관리부', 1400);

 

예제 )

-- 사원번호를 입력받고 그 사원의 급여에 1000을 더한 값으로 갱신하라
-- 사원번호와 갱신된 급여를 출력하라
delimiter //
create procedure update_salary_1000(in v_empno int)
begin
	declare emp_sal decimal(8,2);
	update employees set salary = salary + 1000 where employee_id = v_empno;
	select salary into emp_sal from employees where employee_id = v_empno;
	select v_empno as 사원번호, emp_sal as 급여;
end;
//
delimiter ;

call update_salary_1000(150);

 

'DB' 카테고리의 다른 글

[MySQL] Function  (0) 2022.06.21
[MySQL] 제어문, Cursor  (0) 2022.06.21
[MySQL] View  (0) 2022.06.20
[MySQL] 무결성  (0) 2022.06.20
[MySQL] create, drop, alter / insert, delete, select, update  (0) 2022.06.20