結果セットのインスタンス、2サイクルの実行タイミングを作成するストアドプロシージャをMySQLおよび

Navicatはを使用してストアドプロシージャを作成します

 

BEGIN 
    #Routine本体はこちら壁紙...行く
            DECLARE(今()、インターバル60のstartTime DATETIMEのデフォルトDATE_SUB #は、現在の時間の前に1時間を開始、MINUTE)を
            DECLARE endTimeはDATETIMEをデフォルトNOW();#終了、現在の時間
    
            のDECLARE START_NUMはintです END_NUM INT宣言;  #宣言完了フラグ End_flagはDEFAULT 0 int型宣言を、#は変数sカーソルがDEFAULT 0宣言S INT座標定義宣言scollector_idのINT; ;宣言skwHd DOUBLE ;宣言skVarHd DOUBLE ;宣言scollect_time日時;宣言ecollector_id int型、宣言ekwHd DOUBLE 。 DOUBLE ekVarHdのDECLARE ; DECLAREのecollect_time日時; collector_idとして#声明游标start_curosr DECLARE start_curosr CURSOR FOR選択t.id、kwhdとしてt1.EPS1 + t1.EPS2、kVarhdとしてt1.EQS1 + t1.EQS2、tb_collector_info T左からt1.collect_time JOIN tb_electric_power_info T1 ON t.id = t.idは(SELECTがSTART_TIME =のstartTimeとEND_TIME = tb_kwh_info FROM collector_idないでt1.collector_id たendTime)とABS(TIMESTAMPDIFF(分t1.collect_time、のstartTime))<= 4によってため、collector_id collector_idとして選択t.id FOR#声明游标end_curosr DECLAREのend_curosrカーソル、t1.EPS1 + t1.EPS2 kwhdとして、t1.EQS1 + t1.EQS2 kVarhd、LEFT JOINをtb_collector_info Tからt1.collect_timeとしてtb_electric_power_info T1 ON t.id = t.idはSELECTがtb_kwh_info START_TIME =のstartTimeとEND_TIME = FROM collector_idない(でt1.collector_idendTimeの)とABS(TIMESTAMPDIFF(分t1.collect_time、endTimeは))によって<= 4順序collector_id。#设置终止标志DECLARE HANDLER FORを継続し、NOT FOUNDのSET end_flag = 1 ; #(からSTART_NUMへの将结果集大小放入START_NUM SELECT COUNT(*)はcollector_idとしてt.id選択し、kwhdとしてt1.EPS1 + t1.EPS2、kVarhdとしてt1.EQS1 + t1.EQS2、tb_collector_infoトンからt1.collect_time LEFTはtb_electric_power_info T1 ON t.id = JOIN t.idは(SELECTがSTART_TIME =のstartTimeとEND_TIME = tb_kwh_info FROM collector_idないでどこt1.collector_idをAND ABS(TIMESTAMPDIFF(分t1.collect_time、のstartTime))<= 4順序たendTime)など)collector_idによってT2; END_NUMに結果セットのサイズEND_NUM SELECT COUNT(*)へ#の追加 (から、kVarhdとしてt1.EQS1 + t1.EQS2、kwhdとしてcollector_id、t1.EPS1 + t1.EPS2としてのt1.collect_timeをt.idを選択ON t.id = tb_collector_info LEFT T T1 tb_electric_power_info JOIN NOT IN t.idは(SELECTがFROM collector_id tb_kwh_info WHEREとのstartTime = START_TIME END_TIME = WHERE t1.collector_id 及びABS(TIMESTAMPDIFF(分t1.collect_time、endTimeは))<= endTimeは) 。collector_id 4)などによって順番T2; 2 START_NUM> 0であり、END_NUM> 0 THEN場合#動作空でない場合は#カーソルが開いて開放されstart_curosrと、 -最初のカーソルループout_loopを:INTOループstart_curosr FETCH scollector_id、skwHdを、skVarHd、scollect_time; = 1 End_flag THEN IF。LEAVEのout_loop; END IF ; OPEN end_curosr; -第二カーソルループinner_loop:LOOPはINTO end_curosrをFETCH ecollector_id、ekwHd、ekVarHd、ecollect_time。end_flag = 1 THEN IF LEAVEのinner_loop。END IF ; scollector_id = ecollector_id IF INSERT INTO次いで(collector_id、START_TIME、END_TIME、キロワット時、kVarh、タイプ)tb_kwh_info VALUES(scollector_id、scollect_time、ecollect_time、ekwHd-skwHd、ekVarHd-skVarHd、1 )。END IF ; END LOOPのinner_loop。CLOSE end_curosr; -注意这里、停止循环标志SETのend_flag = 0 END LOOP out_loop。CLOSE start_curosr; 場合は終了終わり

 

 

 

 ストアドプロシージャを呼び出すためのイベントを作成します

 

 

 

 

 

 オープン定期的なタスク

 

おすすめ

転載: www.cnblogs.com/tyroxyz/p/12530224.html