728x90

https://stepby-yun.tistory.com/191

 

mysql procedure 프로시저 생성 및 실행 (구본문자 DELIMITER )

while문 해보려는데.. 나와같은 의문을 가지신 분 프로시저 꼭 만들어서 써야돼? https://stackoverflow.com/questions/12954095/mysql-declare-while-outside-stored-procedure-how mysql DECLARE WHILE outside..

stepby-yun.tistory.com

지난시간...

while문 해보려다가 프로시저로 감싸야한다길래 그거 공부했다.

 

다시 while문 해보자~

 

 

create procedure pro(i int)
begin 
while i < 5 do
insert into sequence (interest_amount) values (i);
set i = i +1;
end while;
end
//
DELIMITER ;

call pro(0);

 

 

 

 

 

 

커맨트 창에 명령어입력할때 한 줄씩 넣어야 작동하네...

while 기본적인 거 했으니까 과제해보기

 

 

1시간씩 이자액 증가하기 

명령문 실행했을 때

기준 시간보다 몇 시간 지나있으면 그 몇시간 만큼 이자액 증가. 

 

 

DELIMITER //

create procedure pro(i)

while   if (기준시간 + 1 분 * i) > 기준시간 ,이면 실행한다.   do

이자액 증가 실행 

insert into sequence (interest_amount) values (증가한 이자액 넣기);

set i = i+1;

end while

end

 

//
DELIMITER ;

 

 

call pro(0)

 

 

 

0부터 시작해서 

기준시간

 

 

 

----

몇분이 지났는지는 

금액으로 넣어줘야되려나?

 

 

 

조건은 1분씩 이자액이 들어갈거임

 

지금시간보다 1분증가

현재시간이 기준시간보다 n분이상이면

if now >

n분 증가할때마다 이자율 증가

 

 

https://ponyozzang.tistory.com/697

 

MySQL 날짜, 시간 계산 DATEDIFF, TIMEDIFF 사용 방법

MySQL에서 날짜 함수를 사용해 날짜 또는 시간 게산을 하는 방법을 알아보겠습니다. 날짜와 시간 계산에 관련된 함수가 어떤 것이 있는지 먼저 간단히 보겠습니다. DATEDIFF() - 두 기간 사이의 일수

ponyozzang.tistory.com

SELECT * FROM test.sequence;
drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while @min < 30 do
set @min = minute((SELECT TIMEDIFF(now(),'2022-05-11 10:30:00')));
set @deposit_amount =(select deposit_amount from sequence where id='1');
select @min;
insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end while;
end //
delimiter ;

call pro();

 

오 뭔가 함 근데 계속 들어가!!!!

1분 지났을때만 추가되어야하는데..

 

 

SELECT * FROM test.sequence;
truncate sequence;

insert into sequence (name,deposit_date,deposit_amount) values ('이소윤','20200509','10000000');

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while @min <10 do
set @min = minute(   (SELECT TIMEDIFF(now(),'2022-05-11 11:48:00'))   );
set @deposit_amount =(select deposit_amount from sequence where id='1');
select @min;
insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end while;
end //
delimiter ;

call pro();



1분마다 바뀌어야하는데 초 차이날때마다 업데이트됨

워크벤치에서 한번에 실행하고 싶은데 왜 cmd에서는 잘되어도 워크벤치는null값으로 계속 찍힐까?

 

 

 

계속 찍힘 이렇게..

-------------------

 

SELECT * FROM test.sequence;SELECT * FROM test.sequence;
truncate sequence;

insert into sequence (name,deposit_date,deposit_amount) values ('이소윤','20200509','10000000');

drop procedure if exists pro;
delimiter //
create procedure pro()
begin

set @deposit_amount =(select deposit_amount from sequence where id='1');
while @min <10 do
set @min = minute(   (SELECT TIMEDIFF(now(),'2022-05-11 14:26:00'))   );
if ( @min /@min >0) then
insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end if;
end while;

end //
delimiter ;

call pro();

 

----

 

set @lastTime = (select deposit_date from sequence where  deposit_date order by id desc limit 1);

 

만약, 이전분보다 1분 흘렀으면

if   (SELECT TIMEDIFF(now(),마지막행시간)) > '00:01:00'

set 흐른분 = minute(SELECT TIMEDIFF(now(),마지막행시간))

마지막행에 넣기 흐른분* 이자율 

 

 

////////////////

SELECT * FROM test.sequence;SELECT * FROM test.sequence;
truncate sequence;
set @test = (select subtime(now(),'00:02:00'));
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤',@test,'10000000');

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while @min <30 do
set @interestAmount = (select interest_amount from sequence);

if   (SELECT TIMEDIFF(now(),@lastTime)) > '00:01:00' then
set @lastTime = (select deposit_date from sequence where  deposit_date order by id desc limit 1);
set @min = minute(   (SELECT TIMEDIFF(now(),@lastTime))   );
if ( @interestAmount !=  @interestAmount) then
insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end if;
end if;
end while;
end //
delimiter ;

call pro();

 

 

 

///////////

SELECT * FROM test.sequence;SELECT * FROM test.sequence;
use test;
truncate sequence;
set @test = (select subtime(now(),'00:02:00'));
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤',@test,'10000000');

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while  do
set @min = minute(   (SELECT TIMEDIFF(now(),(select deposit_date from sequence where  deposit_date order by id desc limit 1)))   );
set @interestAmount = (select interest_amount from sequence where interest_amount order by id desc limit 1);

if    @min > '0' then
insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
if ( @interestAmount !=  @interestAmount) then
insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end if;

end if;
end while;
end //
delimiter ;

call pro();

 

/////////////

 

------------

 

 

 

마지막에서 1꺼

마지막에서 2한번더 들어간거!

이렇게 

수정해야겠다. 왜냐면 

id=2부터 이자액 들어가니까

 

use test;
truncate sequence;

set @setTime = (select subtime(now(),'00:02:00'));
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤',@setTime,'10000000');

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
set @min = minute((SELECT TIMEDIFF(now(), @setTime)));
set i =1;

while i <= @min do
set i = i +1;
set @interest_amount = (select interest_amount from sequence where  interest_amount order by id desc limit 2);
set @Prev_interest_amount = (select interest_amount from sequence where  interest_amount order by id desc limit 3);

if (@interest_amount != @Prev_interest_amount) then 
 insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end if;
end while;
end //
delimiter ;

call pro();

 

흑흑 안돼...

 

 

왜 삭제 안되지?????

 

 

use  test;

를 빼먹었나 그거 하고 하니까 됨

 

 

/////

여러번으 시도를 했지만 안됨..

use test;
truncate sequence;


set @setTime = (select subtime(now(),'00:02:00'));
select @setTime;
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤',@setTime,'10000000');
select * from sequence;

drop procedure if exists pro;
delimiter //
create procedure pro(i int)
begin
set @min = minute((SELECT TIMEDIFF(now(), @setTime)));
select @min;


while i <= @min do
set i = i +1;
select i;
set @interest_amount = (select interest_amount from sequence where  interest_amount order by id desc limit 1);
set @Prev_interest_amount = (select interest_amount from sequence where  interest_amount order by id desc limit 2);

if (@interest_amount != @Prev_interest_amount) then 
 insert into sequence (interest_amount) values (@min*(@deposit_amount*0.04/12));
end if;
end while;
end //
delimiter ;

call pro(1);
select * from sequence;

728x90

+ Recent posts