存储过程的定义
在大型在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,
用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程基本格式
create procedure 过程名()
begin
SQL语句;
end;
调用存储过程格式
call 过程名();
不带参数的简单存储过程
create procedure p_test()
begin
select * from actor;
end;
## 调用
call p_test();
执行结果
带变量的存储过程
-
使用declare来申明变量,变量必须先申明在使用
-
变量有数据类型和长度之说
-
可以使用set来为变量赋值
-
变量需要返回的时候,可以使用select 变量名 来返回变量值
## 举个栗子
create procedure p_test_2()
begin
DECLARE first_name varchar(20); -- 申明变量first_name,并指定长度
SET first_name='PENELOPE'; -- 使用set来为变量赋值
SELECT first_name into first_name from actor limit 1; -- 将查询结果装入变量中
SELECT first_name; -- 查看变量值
end;
调用及执行结果
带参数的存储过程
## 基本语法
create procedure p_test_3([in|out|inout] 参数名 参数类型)
begin
SQL语句;
end;
in:传入参数,如果没有指定,默认是in
out:返回参数
inout:可以是入参也可以是返回值
## 入参——in
来个例子,根据输入演员id返回演员的last_name
CREATE PROCEDURE p_test_3 (
IN id int) BEGIN
DECLARE
last_name_a VARCHAR ( 20 );
SELECT
last_name into last_name_a
FROM
actor
WHERE
actor_id = id
LIMIT 1;
SELECT
last_name_a;
END;
CALL p_test_3 (1);
## 执行结果:
演员表:
返回参数——out
场景:
需要根据输入演员的id,返回演员的firstname
CREATE PROCEDURE p_test_4 (
IN id INT,
OUT f_name VARCHAR ( 20 ))
BEGIN
SELECT
first_name INTO f_name
FROM
actor
WHERE
actor_id = id;
END;
set @uname='';
CALL p_test_4 (3,@uname);
SELECT @uname as first_name;
演员表数据
执行结果