mysql 存储过程案例

2020-04-30  本文已影响0人  境与界
drop PROCEDURE if exists test_20200429;

CREATE  PROCEDURE `test_20200429`()
begin 
    DECLARE num INT DEFAULT 0;
    declare v_sql_0 varchar(500);
    declare mainId BIGINT;
    declare faren varchar(500);
    
    declare data_list cursor for    SELECT rid FROM TD_ZY_UNITBASICINFO WHERE LEGAL_PERSON = '1' ;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET num=1;
        open data_list ;
        fetch data_list into mainId;
        while num <> 1 do 
            -- 使用max函数防止N/A,导致无法用null判断;注意字符串 !="1" 是双引号
                SET v_sql_0 = CONCAT('SELECT MAX(T.LEGAL_PERSON) into @param1 FROM TD_ZY_UNITBASICINFO2 T WHERE T.LEGAL_PERSON !="1" and  T.DECLARE_STATUS =3 and T.MAIN_ID = ',mainId,' ORDER BY    T.DECLARE_DATE DESC LIMIT 1');
                SET @sql_0 = v_sql_0;
                -- 预处理需要执行的动态SQL,其中stmt是一个变量
                PREPARE stmt0 FROM @sql_0;  
                -- 执行SQL语句
                EXECUTE stmt0;   
                -- 释放掉预处理段   
                DEALLOCATE PREPARE stmt0;     
                -- @param1赋值给rid
                SET faren = @param1;
                
                 -- null 判断的方式
                if faren is not  null then 
                    UPDATE TD_ZY_UNITBASICINFO set LEGAL_PERSON = faren wHERE rid = mainId;
             end if;                    
            fetch data_list into mainId;
        end while;
    close data_list;
end;

call test_20200429();

上一篇下一篇

猜你喜欢

热点阅读