mysqlストレージ・プロシージャ・インスタンス(日付が時間単位で増加while loopループネスト乱数生成)
3072 ワード
直接コード:
[
DELIMITER $$ drop procedure if exists proc_test$$
create procedure proc_test() begin
declare id int;--オブジェクトid declare done int;--ループ終了フラグ declare in_dateTime date;--サイクル増加の開始時間 declare tempVal int;--乱数 declare cursor_test cursor for select cfldID from cfield;--カーソルを確立し、すべてのcfieldのid を取得する
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;--ループ終了フラグを設定する
open cursor_test;--カーソルを開きます. cursor_loop:loop
fetch cursor_test into id; if done =1 then
leave cursor_loop; end if;
--開始時刻値を設定します. set in_dateTime = '2012-11-30 00:00:00';
set @in_dateTime = in_dateTime;--whileインクリメントサイクル、毎回1時間増加 loop_while: while @in_dateTime < '2012-11-30 23:00:00' do --乱数 を生成
SELECT FLOOR(18 + (RAND() * 7)) into tempVal; set @tempVal = tempVal;
insert into cdacq(cfldID,HTime,MTime,LTime,FanState,FanPowerState,SupplyTemp,RoomTemp,AcqTime,Alt) values(id,10000,10000,10000,'84','0',42,@tempVal,@in_dateTime,'');
set @in_dateTime = date_add(@in_dateTime, interval '01:00:00' hour_second);--時間が1時間増加した end while loop_while;--whileサイクル を終了
end loop cursor_loop;--loopサイクルの終了 close cursor_test;--カーソルを閉じます.
end$--ストレージプロセス終了 DELIMITER;
[
DELIMITER $$
create procedure proc_test()
declare id int;--オブジェクトid
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;--ループ終了フラグを設定する
open cursor_test;--カーソルを開きます.
fetch cursor_test into id;
leave cursor_loop;
--開始時刻値を設定します.
set @in_dateTime = in_dateTime;
SELECT FLOOR(18 + (RAND() * 7)) into tempVal;
insert into cdacq(cfldID,HTime,MTime,LTime,FanState,FanPowerState,SupplyTemp,RoomTemp,AcqTime,Alt) values(id,10000,10000,10000,'84','0',42,@tempVal,@in_dateTime,'');
set @in_dateTime = date_add(@in_dateTime, interval '01:00:00' hour_second);--時間が1時間増加した
end$--ストレージプロセス終了
DELIMITER $$
drop procedure if exists proc_test$$
create procedure proc_test()
begin
declare id int; -- id
declare done int; --
declare in_dateTime date; --
declare tempVal int; --
declare cursor_test cursor for select cfldID from cfield; -- , cfield id
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; --
open cursor_test; --
cursor_loop:loop
fetch cursor_test into id;
if done =1 then
leave cursor_loop;
end if;
--
set in_dateTime = '2012-11-30 00:00:00';
set @in_dateTime = in_dateTime;
--while ,
loop_while: while @in_dateTime < '2012-11-30 23:00:00' do
--
SELECT FLOOR(18 + (RAND() * 7)) into tempVal;
set @tempVal = tempVal;
insert into cdacq(cfldID,HTime,MTime,LTime,FanState,FanPowerState,SupplyTemp,RoomTemp,AcqTime,Alt) values(id,10000,10000,10000,'84','0',42,@tempVal,@in_dateTime,'');
set @in_dateTime = date_add(@in_dateTime, interval '01:00:00' hour_second); --
end while loop_while; -- while
end loop cursor_loop; -- loop
close cursor_test; --
end $$ --
DELIMITER;