首页 / MYSQL / Mysql-存储过程
Mysql-存储过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql-存储过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2845字,纯文字阅读大概需要5分钟。
内容图文
TABLE students( stu_id INT(10) not NULL AUTO_INCREMENT PRIMARY KEY, stu_name VARCHAR(50) not NULL, age INT(3) not NULL )ENGINE="INNODB", CHARSET="UTF8"; INSERT INTO students VALUES(NULL, "lily", 21); INSERT INTO students VALUES(NULL, "tom", 18); INSERT INTO students VALUES(NULL, "marton", 16);
创建存储过程
栗子1:创建无参数的存储过程
DELIMITER // CREATE PROCEDURE studentage() BEGIN SELECT AVG(age) AS studentavgage FROM students; END // DELIMITER ;
调用
CALL studentage();
栗子2:创建有参数的存储过程
DELIMITER // CREATE PROCEDURE studentage( OUT agel INT, OUT ageh INT, OUT agea INT ) BEGIN SELECT MIN(age) INTO agel FROM students; SELECT MAX(age) INTO ageh FROM students; SELECT AVG(age) INTO agea FROM students; END // DELIMITER ;
调用
CALL studentage(@agemin, @agemax, @ageavg); SELECT @agemin, @agemax, @ageavg;
栗子3:创建一个有输入输出的存储过程
DELIMITER // CREATE PROCEDURE studentage( IN agelimit INT, OUT scount INT ) BEGIN SELECT COUNT(*) INTO scount FROM students WHERE age > agelimit; END // DELIMITER ;
调用
CALL studentage(18, @scount); SELECT @scount;
栗子4:创建智能存储过程
需求
三个同学一起上超市购物,超市现在有一个大一新生的优惠活动,旨在促进年轻的大一新生前来购物
是大一新生,购物总价打八折(当然这个需求是我胡诌的。。。-_-)
准备数据
CREATE TABLE orderitems( ord_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, stu_id INT, total_price DECIMAL(8, 2) ); INSERT INTO orderitems VALUES(NULL, 1, 200.00); INSERT INTO orderitems VALUES(NULL, 2, 300.00); INSERT INTO orderitems VALUES(NULL, 3, 400.00); SELECT * FROM orderitems;
创建
DELIMITER // CREATE PROCEDURE ordertotal( IN sid INT, IN isfreshman BOOLEAN, OUT ototal DECIMAL(8, 2) )COMMENT ‘Obtain ordertotal after discount, optionally adding discount‘ BEGIN -- Declare variable for total DECLARE total DECIMAL(8, 2); -- Declare variable discount percentage DECLARE discountperc INT DEFAULT 8; -- Get the order total SELECT total_price FROM orderitems WHERE stu_id = sid INTO total; -- the student is freshman? IF isfreshman THEN SELECT total*discountperc/10 INTO total; END IF; -- Finally, save to out variables SELECT total INTO ototal; END // DELIMITER ;
调用
CALL ordertotal(1, 1, @ototal); SELECT @ototal;
说明
1)OUT表示从存储过程中传出
2)IN表示传递给存储过程
3)INOUT表示对存储过程传入和传出
4)INTO指定一个检索的值保存到OUT对应的变量中
5)存储过程的代码位于BEGIN和END语句内
6)所有的MYSQL变量都以@为首
7)BOOLEAN值指定1为真,0为假
8)DECLARE定义两个局部变量,要求指定变量名和数据类型
显示存储创建过程语句
SHOW CREATE PROCEDURE studentage;
显示何时、由谁创建等信息
SHOW PROCEDURE STATUS LIKE ‘studentage‘;
删除存储过程
DROP PROCEDURE studentage;
参考资料:《Mysql必知必会》
Mysql-存储过程
标签:有一个 sid begin out span key res int nts
本文系统来源:https://www.cnblogs.com/marton/p/11470471.html
内容总结
以上是互联网集市为您收集整理的Mysql-存储过程全部内容,希望文章能够帮你解决Mysql-存储过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。