티스토리 뷰

MySQL

190909 고객등급 프로시저

猫猫 2019. 9. 9. 12:18
반응형
create procedure gProc() 
begin 
declare id varchar(10); -- id 저장할 변수
declare g varchar(5);  -- 등급 저장할 변수
declare total bigint;  -- 합계 저장할 변수
declare endofRow boolean default false;  -- 마지막 행인지 판단할 변수
declare usercursor cursor for -- 커서 정의 (한 행 씩 움직이면서 가리키고 있을것)
select U.userID , sum(price * amount) from buyTbl B  ( buyTbl 에서 U.userID와 가격*갯수의 합계를 가져온다)
right outer join userTbl U (userTbl과 join함)
on B.userID = U.userID (userID를 기준으로)
group by U.userID; ( userID별로 그룹으로 묶는다)
declare continue handler for ( 커서가 계속 움직이는 조건 정의)
not found set endofRow = true; ( 다음 행에 아무것도 발견하지 못했을때 endofRow 를 true로 변경한다.)
open usercursor; -- 커서 열기 
cursor_loop : loop  -- 루프문 이름 정하기
fetch usercursor into id, total;  -- usercursor에 저장된 값(userID, sum(price*amount) 를 각각 id와 total에 넣는다. 
if endofRow = true then -- 만약 endorRow가 true면 ( 다음에 행이 없다는 소리)
leave cursor_loop;  -- cursor loop를 break 한다.
end if; -- if문 끝 
case -- 등급구별
when(total>=1500) then set g = 'great'; -- 만약 total(buyTbl에서 가져온 sum(price*amount))이 1500 보다 크면 great 
when(total>=1000) then set g = 'good'; 
when(total>=10) then set g = 'soso'; 
else set g = 'ghost'; end case; -- 그 아무것도 아니면 ghost 
update userTbl set grade = g where userID = id;  -- userTbl 의 grade 칼럼에 g의 값을 넣는데 조건은 userID와 id가 같을것
end loop cursor_loop; -- 루프 끝냄 
close usercursor;  -- 커서 닫음
end$$

mysql> delimiter ;
mysql> call gProc();

mysql> select * from userTbl;
+--------+-----------+-----------+--------+---------+---------+--------+------------+-------+
| userID | name      | birthYear | addr   | mobile1 | mobile2 | height | mDate      | grade |
+--------+-----------+-----------+--------+---------+---------+--------+------------+-------+
| BBK    | 바비킴    |      1973 | 서울   | 010     | 0000000 |    176 | 2013-05-05 | great |
| EJW    | 은지원    |      1972 | 경북   | 011     | 8888888 |    174 | 2014-03-03 | soso  |
| JKW    | 조관우    |      1965 | 경기   | 018     | 9999999 |    172 | 2010-10-10 | ghost |
| JYP    | 조용필    |      1950 | 경기   | 011     | 4444444 |    166 | 2009-04-04 | soso  |
| KBS    | 김범수    |      1979 | 경남   | 011     | 2222222 |    173 | 2012-04-04 | good  |
| KKH    | 김경호    |      1971 | 전남   | 019     | 3333333 |    177 | 2007-07-07 | ghost |
| LJB    | 임재범    |      1963 | 서울   | 016     | 6666666 |    182 | 2009-09-09 | ghost |
| LSG    | 이승기    |      1987 | 서울   | 011     | 1111111 |    182 | 2008-08-08 | ghost |
| SSK    | 성시경    |      1979 | 서울   | NULL    | NULL    |    186 | 2013-12-12 | soso  |
| YJS    | 윤종신    |      1969 | 경남   | NULL    | NULL    |    170 | 2005-05-05 | ghost |
+--------+-----------+-----------+--------+---------+---------+--------+------------+-------+
반응형

'MySQL' 카테고리의 다른 글

mysql 에서 '' 값 찾기  (0) 2020.10.20
190909 mysql trigger  (0) 2019.09.09
190906 while 구구단 프로시저  (0) 2019.09.09
190830 mysql in, out 프로시저  (0) 2019.09.09
mysql max_allowed_packet 에러  (0) 2019.09.03