티스토리 뷰

MySQL

190830 mysql in, out 프로시저

猫猫 2019. 9. 9. 12:17
반응형
mysql> delimiter $$
mysql> create procedure sp_nested_loop(in i int, in j int, out x int, out y int, inout z int)
 -- i, j는 받아오는값, x,y는 리턴되어 출력 되는 값, z는 값을 받아와서 변경되어 리턴되는 값

    -> begin

---------내부에서 사용할 a,b,c를 초기화 합니다.
    -> declare a integer default 0; -- default 초기값 설정
    -> declare b integer default 0;
    -> declare c integer default 0;

    -> while a< i do -- a는 0~9까지 즉 10번 반복합니다.

   	 -> while b<j do -- b<20 -- b는 0에서 19까지 즉 20번 반복합니다.
    		-> set c = c+1; -- b가 반복되는동안 c는 1씩 증가합니다.
    		> set b = b+1; -- b가 반복되는 동안 b값도 1씩 증가합니다.
    	-> end while; -- b가 19가 되면 빠져나옵니다

  -> set a = a+1; -- b가 0~19 번 반복되고 빠져나오면 a값은 1씩 증가합니다.
  -> set b = 0; --  b를 다시 0으로 셋팅합니다. b의 while문을 다시 반복하기 위함입니다. 
  -> end while;
  -> set x = a, y=c; 
-- x는 a가 9까지 반복하여 1 증가된 10에서 반복문을 빠져나왔기 때문에 a는 10입니다. 그래서 x도 10입니다.
 -- c의 값은 간단하게 a번씩, b만큼 반복하여 10*20 = 200입니다. 즉 y의 값은 200입니다.
    -> set z = x+y+z;
-- z의 초기값은 기존에 입력으로 받아온 30(z)입니다  여기에 10(a) + 200(c) = 최종값은 240(z) 입니다 
    -> end $$

mysql> delimiter ;

mysql> set @z =30;

mysql> call sp_nested_loop(10,20,@x,@y,@z); 
-- sp_nested_loop(10,20,리턴받을변수 x, 리턴받을변수y, 리턴도받지만 값을 가지고있는 z(30))

mysql> select @x,@y,@z;

결과물
+------+------+------+
| @x   | @y   | @z   |
+------+------+------+
|   10 |  200 |  240 |
+------+------+------+

@ 붙은 변수 : 전역
없는 변수 : 프로시저내에서의 지역변수
반응형

'MySQL' 카테고리의 다른 글

190909 고객등급 프로시저  (0) 2019.09.09
190906 while 구구단 프로시저  (0) 2019.09.09
mysql max_allowed_packet 에러  (0) 2019.09.03
190830 기본 명령문 예제  (0) 2019.08.30
190829 기본 명령문 예제  (0) 2019.08.30