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 $$
    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;