8.plsql存储过程

授予scott用户创建存储过程的权限
GRANT CREATE PROCEDURE TO SCOTT;
一.什么是存储过程
  存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,
  一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,
  用户通过指定存储过程的名字并给出参数
  (如果该存储过程带有参数)来调用存储过程。
  简单的说就是专门干一件事一段sql语句。
  可以由数据库自己去调用,也可以由java程序去调用。
  在oracle数据库中存储过程是procedure。
  
二.为什么要写存储过程
  1.效率高
    存储过程编译一次后,就会存到数据库,每次调用时都直接执行。而普通的sql语句我们要保存到其他地方(例如:记事本  上),
    都要先分析编译才会执行。所以想对而言存储过程效率更高。
  2.降低网络流量
    存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。
  3.复用性高
    存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。
  4.可维护性高
    当功能要求发生小的变化时,修改之前的存储过程比较容易,花费精力少。
  5.安全性高
    完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。
    
三.存储过程基础
1.存储过程结构
(1).基本结构
    Oracle存储过程包含三部分:过程声明,执行过程部分(可写可不写,要增强脚本的容错性和调试的方便性那就写上异常处理)
(2).无参数存储过程
CREATE [OR REPLACE] PROCEDURE 存储过程名称
 AS/IS  --这里的as和is一样任选一个,在这里没有区别,其中demo是存储过程名称。
 [变量1 DATETYPE [:=值][default 值],
  变量2 datatype...]
 begin
   --需要处理的业务逻辑
   [EXCEPTION]--存储过程异常处理
 end [存储过程名称];

(3).有参数的存储过程
CREATE [OR REPLACE] PROCEDURE 存储过程名称(
          参数1 [in/out/in out] datetype,--in可省略数据类型不能带长度
          .....
          )
   AS/IS
  [变量1 DATETYPE [:=值][default 值],
  变量2 datatype...]
 begin
   --需要处理的业务逻辑
   [EXCEPTION]--存储过程异常处理
 end [存储过程名称];
 
IN表示输入参数,是参数的默认模式。
OUT表示返回值参数,类型可以使用任意Oracle中的合法类型。
OUT模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
IN OUT表示该参数可以向该过程中传递值,也可以将某个值传出去 
  
(4).存储过程调用方法
 1.块中调用
 DECLARE --可写可不写
 begin
   pc_anme;-- 在此处也可使用pc_name();
 end;
 2.call调用
 call pc_name();--括号不能少
 3.命令行执行调用
 打开oracle自带的dbms_output.put_line输出,使打印的内容在界面显示需要执行:
 SET SERVEROUT ON;
 execute/EXEC mydemo01();--没有参数括号可省略

注意:调用存储过程的时候,可以位置传参也可以参数传参,也可以混合传参,但是所有位置参数必须写在参数传递前面
      pc_name(values1,values2,参数3=>values3)
      有输出参数out相关的需要提前定义参数,传递参数,不能之间传递值,以用来接收输出变量值
删除存储过程:
drop PROCEDURE 过程名称;
      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--简单列子
create or replace procedure myDemo01(A OUT NUMBER,b number,c in out number)
as
begin
  A:=90;
  C:=100;
  dbms_output.put_line(A);
  dbms_output.put_line(B);
  dbms_output.put_line(C);
  dbms_output.put_line('hello word, my name is stored procedure');
end;
--调用
declare 
a number;
b number default 10;
c number default 20;
begin 
 myDemo01(a,b,c);
 dbms_output.put_line(A);
  dbms_output.put_line(B);
  dbms_output.put_line(C);
end;
   

   
   
   
   
   
   
   
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值