mysql游标遍历,判断数据是否存在,存在则更新,不存在插入

生产环境使用sge调度系统,文档不多就自己写了监控的脚本,数据推入mysql。

现在需要记录任务运行过程中的内存使用生命周期,mysql已经可以抓到实时数据(表over_mem和 表compute_cpu_rss  join的结果)。

现在需要在一个新的表 bb (jobid (primary) , c_rss)中记录内存生命周期。

实现方式为(借助游标,遍历实时数据。jobid存在,就往c_rss列contact追加;jobid不存在,就insert):

 

实现代码:

DROP PROCEDURE
IF
    EXISTS init_reportUrl;
CREATE PROCEDURE init_reportUrl () BEGIN
    DECLARE
        s INT DEFAULT 0;
    DECLARE
        report_id VARCHAR ( 255 );
    DECLARE
        report_mem VARCHAR ( 256 );
    DECLARE
        report CURSOR FOR SELECT
        over_mem.jobid,
        compute_cpu_rss.c_rss 
    FROM
        over_mem
        INNER JOIN compute_cpu_rss ON over_mem.jobid = compute_cpu_rss.c_jobid;
    DECLARE
        CONTINUE HANDLER FOR NOT FOUND 
        SET s = 1;
    OPEN report;
    FETCH report INTO report_id,
    report_mem;
    WHILE
            s <> 1 DO
            INSERT INTO bb (jobid,c_rss) VALUES (report_id,report_mem)
            ON DUPLICATE KEY UPDATE c_rss = concat(c_rss,report_mem);
        FETCH report INTO report_id,report_mem;
        
    END WHILE;
    CLOSE report;
    
END;
CALL init_reportUrl ()

 

posted @ 2020-07-23 15:28  LasyLindsey  阅读(673)  评论(0)    收藏  举报