存储过程和函数
存储过程:为了完成特定的功能的一组sql的集合
优点:
提高sql执行效率
重用型(允许模块化设计)
减轻服务器的压力
安全性
- 创建存储过程(mysql)
语法:
create procedure sp_name({proc_parameter[…]})
[characteristic …] routine_body
sp_name:存储过程名称
proc_parameter:存储过程的参数列表
characteristic:存储过程的特性
routine_body:SQL 语句的内容,可以用 begin…end 来标志 SQL 语句的开始和结束
proc_parameter 由 3 部分组成:输入输出类型、参数名和参数类型 形式:[in | out | inout] param_name type
characteristic 取值:
☞language sql:说明 routine_body 是由 SQL 语句组成
☞[not] deterministic:执行结果是否确定
☞{contains sql | no sql | reads sql data | modifies sql data}:
1、contains sql:子程序包含 SQL 语句,但不包含读或写数据的 SQL[默认]
2、no sql:子程序中不包含 SQL 语句
3、reads sql data:包含可读数据的语句
4、modifies sql data:包含可写数据语句
☞sql security {definer | invoker}:who 有权限来执行 1definer:只有定义者方可执行[默认]
2invoker:调用者可以执行
☞comment ‘string’:注释信息
变量名不要和字段名相同
- 创建存储函数(MySQL)
语法
create function sp_name([func_parameter[…]]) returns type
[characteristic…] routine_body sp_name:存储函数名称 func_parameter:存储函数参数列表
returns type:指定返回值的类型
func_parameter 由 2 部分组成:参数名和参数类型 形式:param_name type
- 创建存储过程(mssql)
语法:
create procedure | proc sp_name [{@参数类型}[=默认值][output], ]
as
sql 语句
创建不带参数的存储过程
eg:
create proc get_employee
as
select * from employee;
创建带参的存储过程
eg:
create proc proc_employee_by_age(@minAge int,@maxAge int)
as
select * from employee where age between @minAge and @maxAge;
执行: exec proc_employee_by_age 14,26;
创建带输出参数的存储过程
eg:
create proc proc_getName_byId(
@id int,@name varchar(20) output