mysql 存储过程

按照百度百科的介绍:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

mysql 中的存储过程的实现是在mysql 5.0 版本中引进的,下面简单介绍mysql中的存储过程基本语法和使用场合。

DELIMITER //

CREATE PROCEDURE GetAllProducts()

BEGIN

SELECT * FROM products;

END //

DELIMITER ;

这里创建了一个非常简单的存储过程,名称是GetAllProducts ,见名思意,就是得到所有产品。

执行存储过程也很简单,就是CALL GetAllProducts()即可。begin 和 end 之间就是存储过程的具体操作。下面介绍存储过程的参数形式使用:

DELIMITER //

CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255))

BEGIN

SELECT city, phone

FROM offices

WHERE country = countryName;

END //

DELIMITER ;

通过输入参数的传入countryName我们可以通过country来得到这个国家城市对应的电话。

DELIMITER $$

CREATE PROCEDURE CountOrderByStatus(

IN orderStatus VARCHAR(25),

OUT total INT)

BEGIN

SELECT count(orderNumber)

INTO total

FROM orders

WHERE status = orderStatus;

END$$

DELIMITER ;

这个存储过程不但有输入参数,还有输出参数,通过执行这个存储过程,我们就可以得到不同订单状态下的订单数目,并且把这个值赋给索要传递的变量,这些只是简单的存储过程。实际应用中,我们的存储过程可能一个就有几百行,甚至上千行,它里面完成了一系列操作。月底的时候,可能我们仅仅通过执行一个call BaoBiao();的存储过程,就把报表所需要的数据都传递赋值完成了。

DELIMITER $$

CREATE PROCEDURE `Capitalize`(INOUT str VARCHAR(1024))

BEGIN

DECLARE i INT DEFAULT 1;

DECLARE myc, pc CHAR(1);

DECLARE outstr VARCHAR(1000) DEFAULT str;

WHILE i <= CHAR_LENGTH(str) DO

SET myc = SUBSTRING(str, i, 1);

SET pc = CASE WHEN i = 1 THEN ‘ ‘

ELSE SUBSTRING(str, i - 1, 1)

END;

IF pc IN (‘ ‘, ‘&‘, ‘‘‘‘, ‘_‘, ‘?‘, ‘;‘, ‘:‘, ‘!‘, ‘,‘, ‘-‘, ‘/‘, ‘(‘, ‘.‘) THEN

SET outstr = INSERT(outstr, i, 1, UPPER(myc));

END IF;

SET i = i + 1;

END WHILE;

SET str = outstr;

END$$

DELIMITER ;

这个存储过程是把标准的语句中的首字母变成大写:

比如:set @str = ‘this is a store‘;

CALL Capitalize($str);

select $str;

得到的语句是:This Is A Store

如果:set @str= ‘this is a store procedure& test!&abc‘;

CALL Capitalize($str);

select $str;

得到的语句是:  This Is A Store Procedure&tTst!&&Ac 会出现一些问题

需要读者们自己去修改这个存储过程了。

时间: 2024-08-15 15:05:11

mysql 存储过程的相关文章

MySQL存储过程定义及调用

#MySQL存储过程 ##最简单的存储过程 DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1() COMMENT '最简单的存储过程' SELECT 1; ##调用 CALL sp1 (); ##带输入参数的存储过程 DROP PROCEDURE IF EXISTS sp2; CREATE PROCEDURE sp2(IN p INT) COMMENT '带输入参数的存储过程' SELECT p; ##调用 CALL sp2(1); #带输出参

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保

MySQL 存储过程检测表是否存在

SQL语句实现: SELECT COUNT(*) FROM information_schema.`TABLES` WHERE TABLE_NAME='youTableName'; where子句中,表名是字符串类型,要加单引号. MySQL存储过程中 函数实现: CREATE DEFINER = `root`@`localhost` FUNCTION `tableExists`(`tName` varchar(30))  RETURNS tinyint(4) BEGIN DECLARE tab

mysql存储过程入门与提高(第三篇)

由于一些不好说的原因,以后博客内容大多只会发笔记的截图.此博客只发在my.oschina.net上,请勿作任何商业用途!! mysql存储过程:是指在数据库中定义一组sql语句组合在一起,并当作一个整体存储在mysql服务器中. 和存储函数的最主要的区别是对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象.函数只能返回一个变量:而存储过程可以返回多个.my.oschina.net讲存储函数的时候会把储存过程和存储函数的区别列出来.my.oschina.net 基本形式: CREA

MYSQL存储过程和函数学习笔记

学至Tarena金牌讲师何山,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和函数,可以避免开发人员重复编写相同的SQL语句. MYSQL存储过程和函数是保存在服务器中,在服务器中存储和执行,可以减少客户端和服务器端之间数据传输的消耗. 存储过程就是一组已经保存在数据库中的语句,并且可以随时地调用. 存储过程允许标准组件式编程,存储过程在被创建以后可以在程序中被多次调用而

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

当PHP遇到MySQL存储过程

1.MySQL存储过程 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编

【瞎折腾系列】mysql存储过程初接触

开始[瞎折腾系列],这个系列纯属瞎折腾,可能没有什么实际意义. mysql存储过程生成表: 新建一张user表,包含id, username , password , usertable字段. 然后创建存储过程: create PROCEDURE create_table() BEGIN DECLARE n int DEFAULT 0; DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET

mysql存储过程笔记

mysql  存储过程: 用变量做表名: 简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mysql的解决方法是将整条sql语句作为变量,其中穿插变量作为表名,然后用sp_executesql调用该语句. 这在mysql5.0之前是不行的,5.0之后引入了一个全新的语句,可以达到类似sp_executesql的功能(仅对procedure有效,function不支持动态查询),比如在用游标循环遍历多个表

Mysql存储过程中使用cursor

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11