PL/SQL存储过程

为什么要创建存储过程?存储过程有什么用?

创建存储过程就在硬盘上生成了一个文件,而不是像declare,只是在内存中存放,

退出的时候就失去了相关操作.

存储过程把复杂的业务逻辑都放在块中进行处理,让外界调用时可以直接使用.

不用第二次转换.



1.创建存储过程的语法:

 

create or replace procedure 存储过程名字(参数名1  in/out/in out   参数类型,参数名2  .....,参数名3)
is/as
变量名 变量类型;
begin
     处理业务逻辑;
end;

   例子(不带任何参数的存储过程):

   --or replace 可以省略,含义是:如果存在此存储过程就覆盖掉之前的

create or replace procedure myproc
is
begin
  dbms_output.put_line('hello');
end;

    执行存储过程:  SQL>exec myproc(参数1,参数2);/如果不带参数:SQL>exec myproc;

 

 

2.关于in / out  / in out这三种用法:

in :   参数是带值传入的,默认情况就是in

out:  参数是不带值传入,带值输出.

in out:  带值输入,带值输出.

 

下面是这三种情况的一个小小的用法:

   例 一  (关于in):

   

 
create or replace procedure myproce(emp_empno emp.empno%type)
is
 a emp.sal%type;
 begin
     select sal into a from emp where empno = emp_empno;
     dbms_output.put_line(a);
 end;
 

    执行也可以用begin  ....end块..

 

    begin
 myproce(7369);
 end;

   例二(关于out的用法)

   

create or replace procedure myproce(emp_empno emp.empno%type,i out number) is
 a emp.sal%type;
 begin
     select sal into a from emp where empno = emp_empno;
     i:=a;
     dbms_output.put_line(i);
 end;

 

    执行存储过程

 DECLARE
n number;
begin
   --n:=100
   myproce(7369,n);
end;

   从这个事例我们可以看出 out参数不能传入参数值,只能输出参数值,

   in的可以接受参数值,

   可以这样执行:   

   SQL> var m number;

   SQL> exec myproce(7369,:m);--    传入out参数需要用var定义变量然后在变量前面加  : 传入

   SQL>print m;

 

    最后总结了一点:

   带in的参数放在等式右边,带out的两边都可以放,但是放在右边才有意义.

   in out两边都可以放.

     我们再来看看in out的用法

     例子如下:

create or replace procedure myproce(emp_empno emp.empno%type,  i in out number) is
 a emp.sal%type;
 begin
     select sal into a from emp where empno = emp_empno;
     dbms_output.put_line(a||'begain,,,,,,,,,,,');
     dbms_output.put_line(i||'over');
 end;

    执行代码块如下:

 

DECLARE
s number;
begin
s:=100;
myproce(7369,s);--注意这里的s 它只能是参数,不能是具体值,除了in外  out/in out不能直接带值传
end;

   如果这里不用in out 这里定义的s 传值进去是无效的,也就是答应dbms_output.put_line(i||'over')没有打印i的值

   它是不会带任何值的,而in out就可以带值也可以不带值....

   在sqlplus中执行时

   首先声明变量 SQL>VAR N NUMBER;--声明传入进去的变量

                      SQL>EXEC :N:=100;--给变量赋值,

                      SQL>EXEC MYPROCE(7369,N);--执行存储过程;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你范德萨范德萨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值