存储过程:
**存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数来执行他
类似于C语言中的函数,用来执行官理任务或者复杂的业务规则。存储过程可以带参数,也可以返回结果.**
存储过程的优点:
执行速度更快
允许模块化程序设计
提高系统安全性
减少网络流通量
Mysql
- Mysql创建无参存储过程
Create procedure product()
Begin
Select * from user;
End;
- 一条简单的存储过程创建语句,此时调用的语法为:
Call procedure();
- 创建有参数的存储过程
有参数的存储过程包括两种参数u“
一个是传入参数;一个是传出参数
例如一个存储过程:
create procedure procedure2(
out p1 decimal(8,2),
out p2 decimal(8,2),
in p3 int
)
begin
select sum(uid) into p1 from user where order_name = p3;
select avg(uid) into p2 from user ;
end ;
从上面sql语句可以看出,p1和p2是用来检索并且传出去的值,而p3则是必须有调用这传入的具体值。
看具体调用过程:
call product(); //无参
call procedure2(@userSum,@userAvg,201708); //有参
当用完后,可以直接查询userSum和userAvg的值:
select @userSum, @userAvg;
结果如下:
+----------+----------+
| @userSum | @userAvg |
+----------+----------+
| 67.00 | 6.09 |
+----------+----------+
1 row in set (0.00 sec)
- 删除存储过程:
一条语句: drop procedure product; //没有括号后面
一段完整的存储过程示例:
**
3.Oracle:
**
预先存储好的SQL程序;保存在oracle中;通过名称和参数执行;可带参数,也可返回结果;可包含数据操纵语句、变量、逻辑控制语句等
优点:执行速度更快;减少网络流通量
语法:
create or replace procedure 存储过程名
( 参数1 in|out|in out 数据类型,
参数2 in|out|in out 数据类型,
.....)
as
[
声明需要输出的变量
]
BEGIN
sql语句
end;
- 存储过程的执行:
1.exec存储过程名(参数或者表达式)
2.Begin
存储过程名(参数或者表达式)
End
- 实例:无参的存储过程
create or replace procedure hello_pro
as
BEGIN
dbms_output.put_line('hello procedure');
end;
set serveroutput on;
begin
hello_pro;
end;
- **:
- 实例有参数的存储过程**
1、参数的数据类型不能加长度
2、不加in或out时,默认是in,即输入参数
3、调用有参数的存储过程必须要传参
create or replace procedure with_param_pro(str VARCHAR2)
as
BEGIN
dbms_output.put_line(str);
end;
set serveroutput on;
begin
with_param_pro('aaaaaaa');
end;
- 实例:通过epmno查找员工姓名和工资
Create or replace
procedure user_pro(id_v emp.empno% TYPE)
as
name_v emp.ename% TYPE;
sal_v emp.sal% TYPE;
BEGIN
SELECT ename into name_v from emp where empno=id_v;
SELECT sal into sal_v from emp where empno=id_v;
dbms_output.put_line('姓名:'||name_v||' 工资:'||sal_v);
end;
Exec emp_print_pro(7499);
--或者
begin
emp_print_pro(eno=7499);
end;