mysql存储实现的_MySql 存储过程创建及实现

伴随着mysql5.X支持存储过程,让人无比自信,特别是一直受困于mssql的程序猿来说,和其他选择的mssql原因相同,mssql开发简单、益于上手,提供良好的人机交互界面,再加上随便在任何一个网站都可以下载到其最新的客户端。伴随着项目用户的增多,相关的问题也显现出来。正版化的问题,因其不能跨操作系统,因此导致使用mssql的话必须搭载winServer操作系统,从成本上考虑造价不菲啊。因而一些中小企业的网站使用了mysql数据库,因其适用于跨平台、企业版造价低的优势,受到了广大中小企业的欢迎。哈哈闲话不扯,进入正题。

因前期做的项目将大部分业务实现通过服务器端的存储过程来实现,所以当初提出变更数据库厂家时很是头疼,并且在这个项目中,为提高存储过程的复用场所,在设计参数时尽量的宽泛,内部通过判断传递过来的参数值,来动态的拼接需要执行的t-sql语句,这个也是一直让我担心的一个问题。还好今天做了一个demo顺利解决。(本人刚刚接触Mysql1月有余,还处于菜鸟级,如有介绍不到之处还请包涵)。

创建数据表语句:

CREATE TABLE T_MENUINFO -- 存储系统导航目录信息

(

MI_ID INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 编号

MI_MENUNAME VARCHAR(50) NOT NULL ,-- 导航名称

MI_MENUURL VARCHAR(255) NOT NULL DEFAULT '',-- 导航链接

MI_MENUPIC VARCHAR(255) NOT NULL DEFAULT '', -- 导航图片链接

MI_PARENTNODE VARCHAR(255) NOT NULL,-- 导航父级节点

MI_GROUPNAME VARCHAR(50) NOT NULL ,-- 导航所属分组名称

MI_STATE BIT DEFAULT 0 -- 导航启用状态

);

这里主要实现通过传递参数 来对T_MENUINFO 进行查询;

详细存储过程如下:

-- --------------------------------------------------------------------------------

-- Routine DDL

-- Note: comments before and after the routine body will not be stored by the server

-- --------------------------------------------------------------------------------

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `PROC_GETMENUINFOLISTBYPARAMETER`(

IN _ID VARCHAR(50),-- 编号

IN _MENUNAME VARCHAR(50)  ,-- 导航名称

IN _MENUURL VARCHAR(255) ,-- 导航链接

IN _MENUPIC VARCHAR(255) , -- 导航图片链接

IN _PARENTNODE VARCHAR(255),-- 导航父级节点

IN _GROUPNAME VARCHAR(50)  ,-- 导航所属分组名称

IN _STATE VARCHAR(50) ,-- 导航启用状态

IN _PAGEINDEX INT,

IN _PAGESIZE INT

)

BEGIN

SET @ORDERHEAD='SELECT MI_ID ,MI_MENUNAME,MI_MENUURL,MI_MENUPIC,MI_PARENTNODE,MI_GROUPNAME,MI_STATE FROM T_MENUINFO ';

SET @ORDERPARAMETER='WHERE 1=1 ';

IF _ID<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_ID=''',_ID,''''));

END IF;

IF _MENUNAME<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_MENUNAME=''',_MENUNAME,''''));

END IF;

IF _MENUURL<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_MENUURL=''',_MENUURL,''''));

END IF;

IF _MENUPIC<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_MENUPIC=''',_MENUPIC,''''));

END IF;

IF _PARENTNODE<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_PARENTNODE=''',_PARENTNODE,''''));

END IF;

IF _GROUPNAME<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_GROUPNAME=''',_GROUPNAME,''''));

END IF;

IF _STATE<>'' THEN

SET @ORDERPARAMETER=CONCAT(@ORDERPARAMETER,CONCAT(' AND MI_STATE=''',_STATE,''''));

END IF;

SET @ORDERORDERBY=CONCAT(' LIMIT ',((_PAGEINDEX-1)*_PAGESIZE),' , ',(_PAGESIZE);  --  !!!!

-- SELECT @ORDERPARAMETER,@ORDERHEAD,@ORDERORDERBY;

SET @ORDERSQL=CONCAT(@ORDERHEAD,@ORDERPARAMETER,@ORDERORDERBY);

-- SELECT @ORDERSQL;

prepare stmt from @ORDERSQL;  -- 预编译      !!!!

EXECUTE stmt;

END

这里重点看一下存在 !!!!编辑的语句,与mssql不同 ,希望能对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值