本文目录一览:
mysql 存储过程
一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。
创建存储过程:
语法:
CREATE PROCEDURE p()
BEGIN
/*此存储过程的正文*/
END
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(pro_price) AS priceaverage
FROM products;
END;
# begin…end之间是存储过程的主体定义
# mysql的分界符是分号(;)
调用存储过程的方法是:
# CALL加上过程名以及一个括号
# 例如调用上面定义的存储过程
CALL productpricing();
# 哪怕是不用传递参数,存储过程名字后面的括号“()”也是必须的
删除存储过程的方法是:
DROP PROCUDURE productpricing;
创建带参数的存储过程:
CREATE PROCUDURE productpricing(
OUT p1 DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price) INTO pl FROM products;
SELECT Max(prod_price) INTO ph FROM products;
SELECT Avg(prod_price) INTO pa FROM products;
END;
# DECIMAL用于指定参数的数据类型
# OUT用于表明此值是用于从存储过程里输出的
# MySQL支持 OUT, IN, INOUT
调用带参数的存储过程:
CALL productpricing(@pricelow,
@pricehigh,
@priceaverage);
# 所有的参数必须以@开头
# 要想获取@priceaverage的值,用以下语句
SELECT @priceaverage;
# 获取三个的值,用以下语句
SELECT @pricehigh, @pricelow, @priceaverage;
另一个带IN和OUT参数的存储过程:
CREATE PROCEDURE ordertotal(
IN onumber INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;
CALL ordertotal(20005, @total);
SELECT @total;
添加一个完整的例子:(这是一个自定义分页的存储过程)
DELIMITER $$
DROP PROCEDURE IF EXISTS `dbcall`.`get_page`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_page`(
/**//*Table name*/
tableName varchar(100),
/**//*Fileds to display*/
fieldsNames varchar(100),
/**//*Page index*/
pageIndex int,
/**//*Page Size*/
pageSize int,
/**//*Field to sort*/
sortName varchar(500),
/**//*Condition*/
strWhere varchar(500)
)
BEGIN
DECLARE fieldlist varchar(200);
if fieldsNames=''||fieldsNames=null THEN
set fieldlist='*';
else
set fieldlist=fieldsNames;
end if;
if strWhere=''||strWhere=null then
if sortName=''||sortName=null then
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
else
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
end if;
else
if sortName=''||sortName=null then
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
else
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
end if;
end if;
PREPARE stmt1 FROM @strSQL;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;
mysql 存储过程总结(一)
1、存储过程定义:
存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发 人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
2、特点:
封装,复用 : 可以把某一业务SQL封装在存储过程中,需要用到 的时候直接调用即可。
可以接收参数,也可以返回数据 :再存储过程中,可以传递参数,也可以接收返回 值。
减少网络交互,效率提升 : 如果涉及到多条SQL,每执行一次都是一次网络传 输。 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了。
3、基本语法
(1)创建:
(2)调用:
(3)查看:
(4)删除
注意: 在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的 结束符。
MYSQL存储过程即常用逻辑知识点总结
Mysql存储过程
1.创建存储过程语法(格式)
解析:
2.存储过程内具体语法与逻辑
A.定义变量语法:
注:可以在参数类型后面加 DEFAULT NULL; 来设置初始值。
B.变量赋值:
方式1(直接对变量进行赋值):
方式2(sql查询的结果直接赋值给变量):
方式3(sql查询的结果直接赋值给多个变量):
c.逻辑判断:
D.游标,(LOOP)循环:
3.存储过程的调用
4.删除存储过程
5.注意事项
存储过程中的分号(;)很重要,尽量不要省略。
mysql存储过程
MySQL存储过程创建的格式如下:
CREATE PROCEDURE 过程名 ([过程参数[,...]])[特性 ...] 过程体
举例代码如下:
CREATE PROCEDURE proc1(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM user; END
存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
过程体的开始与结束使用BEGIN与END进行标识。
注意:MySQL在5.0以前并不支持存储过程
mysql怎么调试存储过程
mysql调试存储过程具体方法:
在你的存储过程中加入如下语句:
SELECT
变量1,变量2;
然后用mysql自带的cmd程序进入mysql
下。
call
你的存储过程名(输入参数1,@输出参数);(注:这里帮助下新同学,如果你的存储过程有输出变量,那么在这里只需要加
@
然后跟任意变量名即可);
即可发现你的变量值被打印到了cmd下