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;
'데이터베이스 > mySQL' 카테고리의 다른 글
MAX MIN order by limit 차이 뭘 쓸지 (0) | 2022.05.13 |
---|---|
한시간씩 이자율 넣기 while문 사용, update,order by limit (0) | 2022.05.12 |
mysql procedure 프로시저 생성 및 실행 (구본문자 DELIMITER ) (0) | 2022.05.10 |
mysql 변수설정 set, declare 사용하려고 하는데...흠.. (0) | 2022.05.10 |
mysql 기본 명령어 (0) | 2022.05.10 |