• ADADADADAD

    mysql 存储过程demo[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:13:21

    作者:文/会员上传

    简介:

    从没写过mysql 存储过程,靠着百度和以前写oracle存储过程的经验写了一个,还算顺利,留个例子吧CREATE DEFINER=`west_brain`@`%` PROCEDURE `man_tree_area`( )BEGIN-- 存储树状

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    从没写过mysql 存储过程,靠着百度和以前写oracle存储过程的经验写了一个,还算顺利,留个例子吧

    CREATE DEFINER=`west_brain`@`%` PROCEDURE `man_tree_area`( )BEGIN-- 存储树状结果处理sql变量DECLAREvar_code VARCHAR ( 1000 );DECLAREvar_pcode VARCHAR ( 1000 );DECLAREvar_name VARCHAR ( 1000 );DECLAREvar_count INT;-- 存储的一些标记变量DECLAREbuf_parents VARCHAR ( 1000 ) DEFAULT '';DECLAREbuf_names VARCHAR ( 1000 ) DEFAULT '';DECLAREbuf_code VARCHAR ( 100 ) DEFAULT '';DECLAREbuf_update INT DEFAULT FALSE;DECLARE buf_is_leaf INT DEFAULT 0;-- 树级别 根为1DECLARE buf_tree_level int DEFAULT 0;-- 是否叶子节点 0 非 1是DECLARE buf_tree_leaf int DEFAULT 1;-- 存储表循环游标的变量DECLAREvcode VARCHAR ( 64 );DECLAREvparent VARCHAR ( 1000 );-- 游标结束的处理变量DECLAREdone INT DEFAULT FALSE;-- 定义表循环游标DECLAREmycursor CURSOR FOR ( SELECT CODE, parent FROM adm_sys_area_info );-- 定义游标溢出的处理操作DECLARECONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- 打开游标OPEN mycursor;-- 定义游标循环tableloop :LOOP-- 读取游标的一条数据到变量里FETCH mycursor INTO vcode,vparent;-- 如果上步游标操作没有读取到记录,则done 会被设置为 TRUE,退出 名称为myloop的循环IFdone THENLEAVE tableloop;END IF;-- 记录当前记录的区域编码SET buf_code = vcode; -- 判断自己是否是叶子节点SELECT count(*) into var_count from adm_sys_area_info where parent= vcode;if var_count = 0 thenupdate adm_sys_area_info set tree_leaf = 1 where code = vcode;elseupdate adm_sys_area_info set tree_leaf = 0 where code = vcode;end if;set var_count = 0;-- 循环查找自己的父节点treeloop :LOOP-- 判断自己是否存在父节点,用count来判断SELECTcount( * ) INTO var_count FROMadm_sys_area_info WHERECODE = vparent;IFvar_count = 0 THEN-- 没有上级节点了,则开始处理以前找到的父节点IFbuf_update THEN-- 更新缓存的数据-- buf_update 为TRUE 则说明找到过父节点-- 下面两个记录处理拼接的字符串末尾多的逗号的问题IF( length( buf_parents ) > 0 ) THENSET buf_parents = LEFT ( buf_parents, CHAR_LENGTH( buf_parents ) - 1 );END IF;IF( length( buf_names ) > 0 ) THENSET buf_names = LEFT ( buf_names, CHAR_LENGTH( buf_names ) - 1 );END IF;-- 更新当前节点的父信息UPDATE adm_sys_area_info SET parents = buf_parents,tree_names = buf_names ,tree_level = buf_tree_level WHERECODE = buf_code;ELSE-- 当前记录是根节点update adm_sys_area_info set tree_level = 1 where code = buf_code;END IF;-- 清理变量SET buf_parents = '';SET buf_names = '';SET vparent = '';SET buf_code = '';SET buf_update = FALSE;SET buf_tree_level = 1;-- 结束当前记录的处理循环LEAVE treeloop;ELSE -- 查找到了父节点SET buf_update = TRUE;-- 查询当前节点的父节点信息SELECT CODE,parent,area_name INTO var_code,var_pcode,var_name FROMadm_sys_area_info WHERECODE = vparent;-- 连接字符串SET buf_parents = CONCAT_WS( ',', var_code, buf_parents );SET buf_names = CONCAT_WS( ',', var_name, buf_names );-- 记录当前查找到记录的父节点codeSET vparent = var_pcode;SET buf_tree_level = buf_tree_level + 1;END IF;END LOOP;END LOOP;CLOSE mycursor;END
    mysql 存储过程demo.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlprocedured