mysql 存儲過程 計算報表


把用例執行情況mysql表匯總起來

proc_write_report  匯總執行用例表中的測試數據  寫入report 表,report表包括字段

report_id(自增)execution_flag,class_name,method_name, module,case_name,execution_amount, pass_amount,fail_amount,fail_reason,`time`,`comment`
 
         
DELIMITER $$
USE `test_cases`$$
DROP PROCEDURE IF EXISTS `proc_write_report`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_write_report`(IN p_table_name VARCHAR(80),IN p_class_name VARCHAR(80),IN p_method_name VARCHAR(80),IN p_execution_flag VARCHAR(80))
BEGIN
    DECLARE var_class_name VARCHAR(180) DEFAULT NULL;   -- 測試類名
    DECLARE var_method_name VARCHAR(180) DEFAULT NULL;  -- 測試方法名
    DECLARE var_module VARCHAR(180) DEFAULT NULL;  -- 測試模塊 中文
    DECLARE var_case_name VARCHAR(180) DEFAULT NULL; -- 測試用例名稱 中文
    DECLARE var_pass_amount INT DEFAULT 0;  --  通過用例數量
    DECLARE var_fail_amount INT DEFAULT 0;  --  失敗用例數量
    DECLARE var_fail_reason VARCHAR(2000) DEFAULT NULL;  -- 失敗原因
    DECLARE var_comment VARCHAR(2000) DEFAULT NULL; -- 備注
    DECLARE var_sql_string VARCHAR(2000) DEFAULT NULL; -- sql 語句
    
    SET @var_cass_name = p_class_name;
    SET @var_method_name = p_method_name;
    
    -- 獲取成功用例數
    SET @var_sql_string = CONCAT("select * from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 1 ");
    --    SELECT  @var_sql_string;
    CALL p_get_select_row_number(@var_sql_string,@var_pass_amount);    
    --    SELECT @var_pass_amount;
    -- 獲取失敗用例數
    SET @var_sql_string = CONCAT("select * from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 0 ");
    --    SELECT  @var_sql_string;
    CALL p_get_select_row_number(@var_sql_string,@var_fail_amount);    
    --    SELECT @var_fail_reason;   
    
    -- 獲取用例模塊中文名稱
    SET @var_sql_string = CONCAT("SELECT DISTINCT test_module_name FROM ",p_table_name," WHERE execution_flag = '",p_execution_flag,"'  AND test_method = '",p_method_name,"'");
    -- select @var_sql_string;
    CALL proc_get_table_column_content(@var_sql_string,@var_module);
    -- SELECT @var_module;
 
    -- 獲取用例方法中文名稱
    SET @var_sql_string = CONCAT("SELECT DISTINCT test_case_name FROM ",p_table_name," WHERE execution_flag = '",p_execution_flag,"'  AND test_method = '",p_method_name,"'");
    -- select @var_sql_string;
    CALL proc_get_table_column_content(@var_sql_string,@var_case_name);
    -- SELECT @var_module; 
    
     -- select * from `execution_send_express_sf`;
  
    SET @var_sql_string = CONCAT("select distinct actual_result from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 0 and is_execution = 1");
    -- SELECT  @var_sql_string;
    CALL proc_get_table_column_content(@var_sql_string,@var_fail_reason);    
    -- SELECT @var_fail_reason ;   

   IF (SELECT COUNT(*) FROM report  WHERE execution_flag = p_execution_flag
    AND class_name = p_class_name AND method_name = p_method_name  ) THEN
  
       UPDATE report SET class_name = p_class_name, method_name = p_method_name,
        module = @var_module, case_name = @var_case_name,
        execution_amount = (@var_pass_amount + @var_fail_amount),  pass_amount = @var_pass_amount , fail_amount = @var_fail_amount,
        fail_reason = @var_fail_reason, `COMMENT` = @var_comment,  `TIME` = NOW()    
        WHERE execution_flag = p_execution_flag  AND class_name = p_class_name  AND method_name = p_method_name  ;
       
   ELSE       
    INSERT  INTO report(execution_flag,class_name,method_name,
        module,case_name,execution_amount,
        pass_amount,fail_amount,fail_reason,`time`,`comment`) 
    VALUES (p_execution_flag,p_class_name,p_method_name,
        @var_module,@var_case_name,(@var_fail_amount + @var_pass_amount),
        @var_pass_amount,@var_fail_amount,@var_fail_reason,NOW(),@var_comment    );   
      
   END IF;
 
  
END$$

DELIMITER ;
 
         

 

 

 

 

獲取查詢語句影響的行數,輸入查詢,輸出行數

 
         
DELIMITER $$

USE `test_cases`$$

DROP PROCEDURE IF EXISTS `proc_get_select_row_number`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_get_select_row_number`(IN p_select_sql VARCHAR(500), OUT p_count INT(8) )
BEGIN 
    -- 聲明
    DECLARE cnt INT DEFAULT 0;
    DECLARE stmt VARCHAR(200);
    
    -- 賦值
    SET @stmt = CONCAT(p_select_sql);  
    -- prepare   
    PREPARE s1 FROM @stmt;
    -- 執行 
    EXECUTE s1;
    -- 獲取查詢影響的行數
    SET @cnt = FOUND_ROWS(); 
    -- 輸出影響函數
    SELECT @cnt INTO p_count ;   
    END$$

DELIMITER ;
 
         

 

 

 

proc_get_table_column_content存儲過程,

把某個字段里面查找出來的多個值,循環取出,賦值追加拼接到另外一個變量里面去,輸入的查詢語句最多只有一個字段

DELIMITER $$

USE `test_cases`$$

DROP PROCEDURE IF EXISTS `proc_get_table_column_content`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_get_table_column_content`(IN select_sql_string VARCHAR(1000), OUT return_string VARCHAR(5000))
BEGIN    
        DECLARE no_more_contents INT DEFAULT 0;
        DECLARE var_id INT;
        -- 保存單個內容
        DECLARE var_content VARCHAR(200) DEFAULT NULL;
        -- 保存所有類容
        DECLARE var_all_content VARCHAR(5000) DEFAULT NULL;
        -- 保存查詢語句
        DECLARE var_sql VARCHAR(1000) DEFAULT NULL; 
       
       
        -- 定義游標
        DECLARE dept_csr CURSOR FOR SELECT * FROM tmp_table;
        -- 錯誤處理
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_contents=1;
        
        -- 使用臨時表
        -- 刪除臨時表
       DROP TEMPORARY TABLE IF EXISTS tmp_table;
       
        -- 組裝創建臨時表語句 
        SET var_sql = CONCAT('CREATE TEMPORARY TABLE tmp_table ',select_sql_string);
        SET @var_sql=var_sql; 
       -- select var_sql;
        -- 預處理要執行的動態SQL
        PREPARE stmt FROM @var_sql;
        --  執行SQL語句
    EXECUTE stmt; 
    -- 釋放掉預處理段     
    DEALLOCATE PREPARE stmt;     
        SET no_more_contents=0;
        -- 打開游標 
        OPEN dept_csr;
        
        contentloop: LOOP
        
        FETCH dept_csr INTO var_content;
        --  如果沒有值,退出循環
        IF no_more_contents = 1 THEN
            LEAVE contentloop;
        END IF;
        -- select var_content;    
        -- 循環取值,並且把不同的值追加賦給同一個變量
        -- SELECT var_content;
      --  SELECT var_all_content AS A;
        IF var_all_content IS NULL THEN
            SET var_all_content  = var_content;
        ELSEIF (var_content IS NOT NULL) && (LENGTH(var_content)!=0) THEN
            SET var_all_content = CONCAT(var_all_content,'',var_content);
        END IF;
      --  SELECT var_all_content AS B;
        -- select var_all_content;
        -- 循環結束 退出循環
        IF no_more_contents = 1 THEN
            LEAVE contentloop;
        END IF;
      --  SELECT var_all_content AS A;
        END  LOOP contentloop;
        -- 關閉游標
        CLOSE dept_csr; 
        SET no_more_contents=0;
        SELECT var_all_content INTO return_string;
        DROP TEMPORARY TABLE tmp_table;
    END$$

DELIMITER ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM