优点
- 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。
- 当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
- 一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
- 存储过程可以重复使用,可减少数据库开发人员的工作量。
- 安全性高,可设定只有某些用户才具有对指定存储过程的使用权
基本语法
--------------创建存储过程-----------------
create proc | procedure pro_name[{@参数数据类型} [=默认值] [output],{@参数数据类型} [=默认值] [output],....]
asSQL_statements
--------------调用存储过程-----------------
CALL Procedure_name;
EXECUTE Procedure_name '' --存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value
--------------删除存储过程-----------------
drop procedure procedure_name --在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程
变量
系统变量
自定义变量
用户自定义变量:@变量名。作用域是当前连接。
SET @var_name = expr;
SET @var_name := expr;SELECT @var_name := expr;
SELECT 字段名 INTO @var_name FROM 表名;
使用变量
SELECT @var_name;
局部变量
局部变量:只在该存储过程中生效的变量,以BEGIN开始,END结束。
使用关键字DECLARE声明。
DECLARE var_name 变量类型 [DEFAULT]
变量类型:INT、BIGINT、CHAR、VARCHAR、DATE、TIME
SET var_name = expr;
SET var_name := expr;
SELECT var_name := expr;
SELECT 字段名 INTO var_name FROM 表名;
参数
输出参数:OUTPUT
输入参数:INPUT
既可用于输入也可用于输出:INOUT
存储过程与函数的区别
函数通常被嵌入到SQL语句中,存储过程可以直接被外部程序调用