存储过程之mysql和oracle


存储过程:


**存储过程是在大型数据库系统中,一组为了完成特定功能的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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值