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参数例子:
CREATE PROCEDURE sp_demo_in_parameter(IN p_in
INT)
BEGIN
SELECT p_in; --查询输入参数
SET p_in=2; --修改
select
p_in;--查看修改后的值
END;
执行结果:
mysql> set @p_in=1
mysql> call
sp_demo_in_parameter(@p_in)
略
mysql> select
@p_in;
略
以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值
OUT参数例子
创建:
mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out
INT)
BEGIN
SELECT p_out;/*查看输出参数*/
SET p_out=2;/*修改参数值*/
SELECT
p_out;/*看看有否变化*/
END;
执行结果:
mysql> SET @p_out=1
mysql> CALL
sp_demo_out_parameter(@p_out)
略
mysql> SELECT @p_out;
略
INOUT参数例子:
mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT
p_inout INT)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT
p_inout;
END;
执行结果:
set @p_inout=1
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个空格
如需补充,请大家跟贴!