개발자 끄적끄적

procedure 본문

MySQL

procedure

햏치 2023. 3. 8. 00:25

<procedure>
- dbms별 유사한 문법 구조를 갖고 있으나 호환되지 않느다
- 컴파일 되어서 해당 dbms내부에 저장된다 따라서 저장형 프로시져라고 불린다
- 반복해서 컴파일 하려면 먼저 기본 procedure를 drop procedure로 삭제해야한다
- procedure은 retrun이 없다 대신, call을 한다

create procedure pro_test1()
begin
  declare cnt int default 0;
  start_rtn : LOOP
    insert into test(s_name) values('HONG');
    if(cnt>100) then
      leave start_rtn;
    end if;
    set cnt = cnt + 1;
  end loop;
end


<procedure 삭제>
drop procedure[ if exists ] 프로시져명


<parameters>
- mode : in, out, inout
  - in : 외부에서 값을 전달 받을 때(in은 생략가능, 안쓰면 기본적으로 in mode)
  - out : 프로시져 내부에서 처리된 결과를 프로시져 밖에서 사용하고자 할 때
  - inout : in+out 기능을 모두 갖는다
*한 번에 두 번 실행하면 오류가 뜨므로 drop해서 재실행한다

<in - ex>
create procedure in_test(su1 int, su2 int)
begin
  select su1+su2;
end;

<out - ex>
create procedure out_test1(out str varchar(50))
begin
  set str = 'park';
end;

[console에서 테스트]
call out_test1(@str);
select @str;
- '@'는 str의 값을 전달받는다

<inout - ex>
create procedure inout_test1(inout su int, inout su2 int)
begin
  set su = su+100;
  set su2 = su2+200;
end;

[console에서 테스트]
set @su = 10;
set @su2 =20;
call inout_test1(@su, @su2);

select @su, @su2;


<if - then>
create procedure if_test1()
begin
  declare a int;
  declare b int;
set a = 10;
set b = 20;

if(a>b) then
  select a;
end if;

if(a<b) then
  select b;

  end if;
end;

<if-then-else>
create procedure if_test2()
begin
  declare a int;
  declare b int;

set a=10;
set b=20;

if(a>b) then
  select a;
else
  select b;

  end if;
end;


<if-then-elseif-else>
create procedure if_test3()
begin
  declare a int;
  declare b int;
  declare c int;

set a=10;
set b=20;
set c=30;

if(a>b) then
  select a;
elseif a>c then
  select b;
else
  select c;
  end if;
end;

'MySQL' 카테고리의 다른 글

case  (0) 2023.03.08
무결성 제약 조건  (0) 2023.03.08
테이블 관련  (0) 2023.03.08