存储过程和函数

 一、存储过程和函数简介

      存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。

二、MySQL存储过程

一.创建存储过程
create procedure sp_name()
begin
.........
end

二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程
1.基本语法:
drop procedure sp_name;

2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.其他常用命令

1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

2.show create procedure sp_name
显示某一个mysql存储过程的详细信息

mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT
Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...])

IN 输入参数
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数
该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数
调用时指定,并且可被改变和返回

IN参数例子:

mysql>DELIMITER //
mysql>CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
       ->BEGIN
       ->SELECT p_in;  /*查询输入参数*/
       ->SET p_in=2;   /*修改*/
       ->select p_in;  /*查看修改后的值*/
       ->END;

       ->//

mysql>DELIMITER ;

执行结果:

mysql> SET @p_in=1;
mysql> CALL sp_demo_in_parameter(@p_in);

mysql> SELECT @p_in;

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_in的值

OUT参数例子
创建:

mysql>DELIMITER //
mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
       ->BEGIN
       ->SELECT p_out; /*查看输出参数*/
       ->SET p_out=2; /*修改参数值*/
       ->SELECT p_out; /*看看有否变化*/
       ->END;

       ->//

mysql>DELIMITER ;

执行结果:
mysql> SET @p_out=1;
mysql> CALL sp_demo_out_parameter(@p_out);

/*未被定义,返回NULL*/

mysql> SELECT @p_out;

INOUT参数例子:

mysql>DELIMITER //
mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
       ->BEGIN
       ->SELECT p_inout;
       ->SET p_inout=2;
       ->SELECT p_inout;
       ->END;

      ->//

mysql>DELIMITER ;

执行结果:
mysql>SET @p_inout=1;
mysql>CALL sp_demo_inout_parameter(@p_inout) ;

SELECT @p_inout;

附:函数库

mysql存储过程基本函数包括:字符串类型,数值类型,日期类型

一、字符串类
CHARSET(str) //返回字串字符集
CONCAT (string2 [,… ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1
mysql> select substring(’abcd’,0,2);
+———————–+
| substring(’abcd’,0,2) |
+———————–+
| |
+———————–+
1 row in set (0.00 sec)

mysql> select substring(’abcd’,1,2);
+———————–+
| substring(’abcd’,1,2) |
+———————–+
| ab |
+———————–+
1 row in set (0.02 sec)

TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //转换成大写
RIGHT(string2,length) //取string2最后length个字符
SPACE(count) //生成count个空格

参考链接:http://wenku.baidu.com/view/3b40ae3a376baf1ffc4fad8a.html

            http://wenku.baidu.com/view/740d51ef0975f46527d3e199.html?from=rec&pos=3&weight=27&lastweight=24&count=5

原文地址:https://www.cnblogs.com/hyzhou/p/2362911.html