oracle数据库 存储过程

存储过程 


是数据库对象之一 (表 索引。。)


数据库的子程序之一
sql语句 没执行一次,都要进行编译 浪费ziyuan


存储过程  是一组可以完成特定功能的sql语句集




创建之后 会进过一次编译保存到数据库中,当应用程序使用时,直接调用即可,如果该存储过程包含参数,需要在调用时传入参数




优点:使用存储过程可以提高数据库执行速度
      存储过程可以重复使用,减少开发工作量
       存储过程只能由某个用户才可以调用执行,安全性高
       某些复杂的操作可以封装成存储过程跟事务结合起来使用




语法格式
存在即替换
create or replace 
参数类型(mode) in(输入参数)
out(输出参数)
in out(输入输出参数)
参数类型可以不写 默认是输入参数(in)


参数的数据类型只写明类型即可,不需要初始长度
  number  ,varchar2
procedure proc_name(存储过程名字)
(参数列表
参数名  参数类型 参数的数据类型,
参数名  参数类型 参数的数据类型


)
is/as  
变量名 变量的数据类型;   n number(4);
变量名 变量的数据类型;


begin
(PLSQL 块)存储过程要执行的逻辑操作


end;






存储过程允许无参,如果有参数,参数列表包含在小括号内




存储过程创建完毕后,使用的时候需要调用 
调用命令
sqlplus 命令  execute  简写为exec
         exec 存储过程名字


call  sqlplus(cmd)/spsql两边都可以使用
call 存储过程名()




存储过程带有参数 给参数传值问题


1、(默认)按照参数的先后位置进行传值


2、根据参数的名称进行传值 例如 (b=>'aaa',a=5)


当参数列表包含输出参数,需要先定义变量


var z number;
exec(2,4,:z);
存储过程中没有输出语句 print z 打印输出


如果包含多个输出变量  print z a;
参数包含 in out 类型 


需要先声明变量 var


当需要给变量赋值时 exec :n1:=3


存储过程存放在数据字典中  user_source
--查看存储过程内容


select text from user_source where name='p1'




存储过程发生编译错误,仍然会创建,只是不能调用
查看错误 show error/errors procedure  存储过程名


edit 可以对缓冲区中的内容进行修改

存储过程的调用
PLSQL调用  存储过程调用

--无参存储过程  不需要小括号

create or replace procedure p1

is

begin
       dbms_output.put_line('this is my first procedure');


end;


--含参  in

create or replace procedure p2
(
   a in number,
   b varchar2
)
is

begin
   dbms_output.put_line(a||'      '||b);

end;

call p2(1,'zhang')


create or replace procedure p3
(
   name in varchar2



)
is
begin
   dbms_output.put_line('你好'||name);

end;
call p3('zhangsan')

--带有out 参数
create or replace procedure  p4
(
  a in number,
  b number,
  c out number
)
is 
begin
 c:=a+b;

end;

var z number



--带有in out 类型

--参数作为 传入,同时也作为输出


create or replace procedure p6
(
   a in out number,
   b in out number


)
is 
begin
   dbms_output.put_line(a);
   dbms_output.put_line(b);
   a:=10000;
   b:=10000;

end;


--查看存储过程

select text from user_source where name='P1';

--删除存储过程
drop procedure p1;--数据库对象 ddl

--PLSQL 调用无参存储过程

declare


begin
       p1();

end;



create or replace procedure p7
(
       v1 varchar2,
       v2 out number

)
is
--number 长度可有可无
       money number;--

begin
       select sal into money from emp where ename=v1;
       if money>500 then
        v2:=500;
       end if;
       
       
       
        


end;
declare
   --声明被调用存储过程的参数    
       arg1 varchar2(10):='SMITH';
       arg2 number;



begin

       p7(arg1,arg2);
       dums_output.put_line(arg2);


end;

--存储过程调用存储过程
create or replace procedure p8
is
    arg1 varchar2(10):='SMITH';
    arg2 number;
begin
       p7(arg1,arg2);
       dbms_output.put_line(arg2);

end;
call P8()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值