MySQL存储过程的创建
语法:
create procedure procedure_name ([in|out|inout] 参数名 参数类型,.........) 过程体
DELIMITER //
CREATE PROCEDURE test(OUT param int)
BEGIN
SELECT COUNT(*) INTO param FROM students;
END
//
DELIMITER;
参数说明:
IN:参数中的值必须再调用存储过程时指定,在存储过程中修改了该参数的值不能被返回,为默认值
OUT:该值在存储过程中被改变,可以返回
INOUT:调用的时候被指定,并且可以被改变和返回
过程体:以begin开始,以end标识结束
变量
(1)declare 变量名1[,变量名2...........] 数据类型[默认值];
数据类型分为:数值类型、字符串类型、日期和时间类型
变量赋值:set 变量名 = 变量值 [,变量名 = 变量值 .......]
(2)用户变量
用户变量一般以@开头
例子:
select 'Hello' into @param;//将字符串赋给用户变量param
select @param;//查询用户变量的值
set @param= 'show';
create procedure testProc()
select concat(@param,'test');
call testProc();
存储过程查询:
(1)select name from mysql.proc where db='practice';
(2) select routine_name from information_schema.routines where routine_schema='practice';
(3)show create procedure practice.inout_param;
(4)show procedure status where db='practice'
存储过程修改
语法格式:
ALTER {PROCEDURE|FUNCTION} sp_name[characteristic.............]
characteristic:
{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA
| SQL SECURITY | DEFINER | INVOKER
| COMMENT 'string'}
参数说明:
sp_name:存储过程或者函数的名称
characteristic:修改存储过程的哪一部分,取值如下:
CONTAINS SQL :表示子程序包含SQL语句,但是,不包含读或写数据的语句
NO SQL:表示子程序中,不包含SQL语句
READS SQL DATA:表示子程序中,包含读数据的语句
MODIFIES DATA:表示子程序中,包含写数据的语句
SQL SECURITY {DEFINER | INVOKER},指明谁有权来执行
DEFINER:表示只有定义者自己才可以执行
INVOKER:表示调用者可以执行
COMMENT 'String' :表示注释信息