SQL存储过程

存储过程
什么是存储过程
创建调用与删除
变量声明
参数定义
流程语句
查看存储过程
什么是存储过程
创建一组为了完成特定功能的SQL语句集
之后需要用到时就可以直接用存储过程名使用
创建的存储过程保存在数据库的数据字典中
创建调用与删除
/* 创建 */DELIMITER $$ CREATE PROCEDURE 名称()BEGIN 语句 END $$ DELIMITER ;/* 调用 */call 名称();/* 删除 */drop pROCedure 名称;
DELIMITER语句将标准分隔符 - 分号(;)更改为:$$,这样就不会被语句中的分号而结束,而是等到$$ 。这样才能保证整个存储过程一起提交
创建完之后可以再改回到分号
变量声明
在存储过程中声明一个变量
DECLARE 变量名 数据类型(大小) DEFAULT 默认值;
/* 声明整形变量a默认值为0 */DECLARE a INT DEFAULT 0;/* 声明多个同类型 */DECLARE x, y INT DEFAULT 0;
分配变量值
要为变量分配一个值,可以使用SET语句
SET total_count = 10 ;
使用SELECT INTO语句将查询的结果赋值给一个变量
SELECT COUNT(*) INTO a FROM 表 ;
参数定义
参数的三种类型
IN:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT:表示过程向调用者传出值
INOUT:INOUT参数是IN和OUT参数的组合。
delimiter $$ CREATE pROCedure name1(in x int ,OUT y int)BEGIN SET y = x+x;END$$ delimiter ;set @b=3;CALL name(5,@b);SELECT @b;结果为10
定义参数
create produce name(参数类型 参数名称 数据类型(大小))
流程语句
IF语句
IF 布尔式 THEN 操作语句;END IF; IF 布尔式 THEN 操作语句;ELSE 操作语句;END IF;
CASE语句
CASE 一变量 WHEN 变量满足条件1 THEN 相应语句 WHEN 变量满足条件2 THEN 相应语句...ELSE 相应语句 END CASE;
循环
WHILE 条件判断 DO...相应语句...END WHILEREPEAT...相应语句...UNTIL 条件判断 END REPEATset autocommit = 0;循环语句块 commit;/* 在循环首尾加上这两条语句,可以避免循环中语句一条一条的执行。 从而提高效率,将循环完毕后所有要执行的语句一起执行 */
查看存储过程
查看所有存储过程
SHOW PROCEDURE STATUS;
查看指定数据库中的存储过程
SHOW PROCEDURE STATUS WHERE db = '数据库名';
查看指定存储过程源代码
SHOW CREATE PROCEDURE 存储过程名
自定义函数
CREATE FUNCTION 函数名(a int) Returns int
函数对比存储过程
不能用临时表,只能用表变量,有些函数不能用,存储过程限制少
存储过程处理的功能比较复杂,而函数实现的功能针对性强,
存储过程可以执行修改表的操作,但是函数不能执行一组修改全局数据库状态的操作
存储过程可以返回参数,如记录集,函数只能返回值或者表对象。存储过程的参数有in,out,inout三种,函数只有in,存储过程声明时不需要返回类型,而函数需要描述返回类型,且函数中必须包含一个有效的return语句
存储过程一般是作为独立部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,所以在查询中位于from关键字后面,sql语句中不可以含有存储过程
end
作者:IT那个小笔记