mysql执行存储过程

moonjerx
2021-08-27 / 0 评论 / 85 阅读 / 正在检测是否收录...

示例1

-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS init_reportUrl; 
-- 创建存储过程
CREATE PROCEDURE init_reportUrl()
BEGIN
    -- 定义变量
    DECLARE s int DEFAULT 0;
    DECLARE report_id varchar(255);
    DECLARE report_url varchar(256);
    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE report CURSOR FOR select reportId,reportUrl from patrolReportHistory;
    -- 声明当游标遍历完后将标志变量置成某个值
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
    -- 打开游标
    open report;
        -- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
        fetch report into report_id,report_url;
        -- 当s不等于1,也就是未遍历完时,会一直循环
        while s<>1 do
            -- 执行业务逻辑
            update patrolreporthistory set reportUrl = CONCAT('patrolReport.html?monitorId=',substring(report_url,15,1),'&reportId=',report_id) where reportId=report_id;
            -- 将游标中的值再赋值给变量,供下次循环使用
            fetch report into report_id,report_url;
        -- 当s等于1时表明遍历以完成,退出循环
        end while;
    -- 关闭游标
    close report;
END;
-- 执行存储过程
call init_reportUrl()

示例2

-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS sys_config_uniform_price; 
-- 创建存储过程
CREATE PROCEDURE sys_config_uniform_price()
BEGIN
-- 定义变量
    DECLARE exe_flag int DEFAULT 0;
    DECLARE _company_no varchar(255);
    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE obj_config CURSOR FOR SELECT DISTINCT company_no from cms_sys_config WHERE is_sys = 0;
    -- 声明当游标遍历完后将标志变量置成某个值
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET exe_flag=1;
    -- 打开游标
    open obj_config;
    -- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
    fetch obj_config into _company_no;
    -- 当s不等于1,也就是未遍历完时,会一直循环
    while exe_flag<>1 do
    -- 执行业务逻辑
        INSERT INTO `cms_sys_config` (
            `id`, `company_no`, `IS_SYS`, `is_switch`, `name`, `keyword`, `conf_value`,
            `available`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`,
            `del_flag`
        )
        VALUES
        (
            UUID(), _company_no, '0', '1', '是否开启出证统一价',
            'is_uniform_price', '0', '0', '1', CURRENT_TIME(), '1', CURRENT_TIME(), '', '0'
        );

        INSERT INTO `cms_sys_config` (
            `id`, `company_no`, `IS_SYS`, `is_switch`, `name`, `keyword`, `conf_value`,
            `available`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`,
            `del_flag`
        )
        VALUES
        (
            UUID(), _company_no, '0', '1', '是否开启出证统一价',
            'is_uniform_price', '0', '0', '1', CURRENT_TIME(), '1', CURRENT_TIME(), '', '0'
        );
    -- 将游标中的值再赋值给变量,供下次循环使用
    fetch obj_config into _company_no;
    -- 当s等于1时表明遍历以完成,退出循环
    end while;
    -- 关闭游标
    close obj_config;
    UPDATE cms_sys_config SET id = REPLACE(id, '-', '');
END;
-- 执行存储过程
call sys_config_uniform_price()
0

评论 (0)

取消

您的IP: