MySQL存储过程 示例

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 WHILE

REPEAT
 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语句时,存储的函数的执行将立即终止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值