DROP PROCEDURE IF EXISTS GetAllActicle;#存储过程存在删除
CREATE PROCEDURE GetAllActicle()#声明存储过程
BEGIN #开始
#主体
DECLARE total_sale INT DEFAULT 0;#声明变量
SET total_sale = 10;#分配变量值
SELECT * FROM axdrice_article;
END; #结束CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255))
#IN用法 定义IN参数时,调用程序必须将参数传递给存储过程
BEGIN
SELECT * FROM offices WHERE country = countryName;
END#调用
CALL GetOfficeByCountry('USA');CREATE PROCEDURE CountOrderByStatus(OUT total INT)
#OUT - 可以更改OUT参数的值,并将其更改后新值传递回调用程序
#存储过程在启动时无法访问OUT参数的初始值。
BEGIN
SELECT COUNT(orderNumber) INTO total FROM orders;
END#调用
CALL CountOrderByStatus(@total);
SELECT @total;CREATE PROCEDURE set_counter(INOUT count INT(4))
#INOUT - INOUT参数是IN和OUT参数的组合.可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。
BEGIN
SET count = count + 1;
END#调用
SET @counter = 1;
CALL set_counter(@counter);
SELECT @counter;#可以多值输入IN/输出OUT/INOUT
#条件语句
IF expression THEN
statements;
END IF;IF expression THEN
statements;
ELSE
else-statements;
END IF;IF expression THEN
statements;
ELSEIF elseif-expression THEN
elseif-statements;
...
ELSE
else-statements;
END IF;CASE case_expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands
...
ELSE commands
END CASE;#循环
WHILE expression DO
statements
END WHILEREPEAT
statements;
UNTIL expression
END REPEAT
#要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理每行
#MySQL游标为只读,不可滚动和敏感.
#只读:无法通过光标更新基础表中的数据
#不可滚动:只能按照SELECT语句确定的顺序获取行,不能跳过行或跳转到结果集中的特定行
#敏感游标和不敏感游标.敏感游标指向实际数据,不敏感游标使用数据的临时副本.敏感游标比一个不敏感的游标执行得更快,因为它不需要临时拷贝数据
DECLARE语句声明游标:DECLARE cursor_name CURSOR FOR SELECT_statement;
SQL游标声明必须在变量声明之后
使用OPEN语句打开游标
OPEN cursor_name;
使用FETCH语句来检索光标指向的下一行,并将光标移动到结果集中的下一行
FETCH cursor_name INTO variables list;
调用CLOSE语句来停用光标并释放与之关联的内存:
CLOSE cursor_name;
创建新存储函数的最简单语法:
CREATE FUNCTION function_name(param1,param2,…)
RETURNS datatype
[NOT] DETERMINISTIC
statements
在CREATE FUNCTION子句之后指定存储函数的名称
列出括号内存储函数的所有参数. 默认所有参数均为IN参数.不能为参数指定IN,OUT或INOUT修饰符
必须在RETURNS语句中指定返回值的数据类型,它可以是任何有效的MySQL数据类型
对于相同的输入参数,如果存储的函数返回相同的结果,这样则被认为是确定性的,否则存储的函数不是确定性的.必须决定一个存储函数是否是确定性的.
如果您声明不正确则存储的函数可能会产生意想不到的结果,或者不使用可用的优化,从而降低性能
将代码写入存储函数的主体中,它可以是单个语句或复合语句.
在主体部分中必须至少指定一个RETURN语句.RETURN语句用于返回一个值给调用者.每当到达RETURN语句时,存储的函数的执行将立即终止