一、存储过程/函数的作用
存储过程和函数是在数据库中定义一些 SQL 语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的 SQL 语句。存储过程和函数可以避免开发人员重复的编写相同的 SQL 语句。而且,存储过程和函数是在 MySQL
服务器中存储和执行的,可以减少客户端和服务器端的数据传输;
二、存储过程/函数的创建
1 创建存储过程
- 不带参数的存储过程
create or replace procedure p_hello is
--如果需要,在此处声明变量
begin
dbms_output.put_line('hello world');
end p_hello;
-- 写完点击执行,这段语句会被编译并存储
打开一个sql执行窗口进行调用(is可以写成as),执行
begin
p_hello; --调用
end;
- 带参数的存储过程
--查询并打印某个员工的姓名,薪水,要求调用时传入员工编号,控制台自动打印
create or replace procedure p_empInfo(i_empno IN emp.empno%TYPE) as
--声明变量
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
begin
select ename, sal into v_ename, v_sal from emp where empno = i_empno;
dbms_output.put_line('员工编号:' || i_empno || ',姓名:' || v_ename || ',薪水:' || v_sal);
end p_empInfo;
调用该存储过程(调用一次会执行一次)
begin
p_empInfo(7839);
p_empInfo(7902);
end;
- 带参数且有返回值的存储过程
--输入员工号查询某个员工(7839)信息,要求讲薪水作为返回值输出,给调用的程序使用
create or replace procedure p_empInfo2(i_empno IN emp.empno%TYPE, o_sal out emp.Sal%TYPE) as
begin
select sal into o_sal from emp where empno = i_empno;
end p_empInfo2;
调用(如果用代码调用,薪水就是返回值)
declare
v_sal emp.sal%TYPE;
begin
p_empInfo2(7839,v_sal);
dbms_output.put_line(v_sal);
end;
三、存储过程/函数的区别
存储过程:
- 作为 PL/SQL 语句执行;
- 在规范中不包含 RETURN 子句;
- 不返回任何值(只有输入/输出参数,结果集);
- 可以包含 RETURN语句,但是与函数不同,它不能用于返回值。它用out输出参数。
存储函数:
- 作为表达式的一部分调用;
- 必须在规范中包含 RETURN 子句;
- 必须返回单个值;
- 必须包含至少一条 RETURN 语句。