Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7569776
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: Oracle

2011-07-29 21:11:25

存储过程与函数特点

1.存放在服务器端,代码共享,增加了代码开发效率

2.存储过程能隐藏表的基本信息,可以简化语句

3.减少网络流量

 

存储过程创建语法

create or repalce procedure procedurename[(参数列表)]

as

//声明变量或自定以数据类型

begin

//语句代码

exception

 

end;

 

 

create or replace procedure emp_pro1

as

vename emp.ename%type;

vsal   emp.sal%type;

begin

  select ename,sal into vename,vsal

  from emp

  where empno=7521;

  dbms_output.put_line(vename||vsal);

end;

 

 

调用存储过程代码

begin

emp_pro1;

end;

 

有参数存储过程。参数的数据类型不能指定大小

 

create or replace procedure emp_pro2(vdeptno emp.deptno%type)

as

cursor emp_cur is select  *  from emp  where deptno=vdeptno;

begin

  for vrow in emp_cur loop

   dbms_output.put_line(vrow.ename);

  end loop;

end;

 

begin

emp_pro2(20);

end;

 

存储过程参数的模式

in  输入 默认为模式

out  输出

inout 输入输出

 

create or replace procedure emp_pro3(vdeptno in emp.deptno%type)

as

vename emp.ename%type;

begin

--  vdeptno:=7521;//错误 in模式参数是只读参数

  select ename into vename  from emp  where empno=vdeptno;

  dbms_output.put_line(vename);

end;

 

create or replace procedure emp_pro4(vsal out emp.sal%type)

as

begin

  select sal into vsal  from emp  where empno=7521;

end;

 

declare

vsal  number(4);

begin

emp_pro4(vsal);

dbms_output.put_line(vsal);

end;

 

create or replace procedure emp_pro5(vsal in out emp.sal%type)

as

begin

  select sal into vsal   from emp  where empno=vsal;

end;

 

declare

vsal emp.sal%type;

begin

  vsal:=7521;

  emp_pro5(vsal);

  dbms_output.put_line(vsal);

end;

 

函数

create  or repalce function funname[(参数列表)]

return 数据类型

as

begin

 

    return ;

end;

 

create or replace function emp_fun1

return varchar2

as

 vename varchar2(10);

begin

   select ename into vename   from emp   where empno=7521;

   return vename;

end;

 

select emp_fun1 from dual

 

declare

ret varchar2(10);

begin

  ret:=emp_fun1;

  dbms_output.put_line(ret);

end;

 

create or replace function emp_fun2(vempno number)

return varchar2

as

 vename varchar2(10);

begin

   select ename into vename   from emp   where empno=vempno;

   return vename;

end;

 

select emp_fun2(7521) from dual

 

 

函数也支持三种参数模式in out

 

create or replace function emp_fun3(vempno in out emp.empno%type)

as

vdeptno emp.deptno%type;

begin

   select sal,deptno    into vempno,vdeptno   from emp   where empno=vempno;

   return vdeptno;

end;

 

declare

vempno emp.empno%type;

ret     number(4);

begin

   vempno:=7521;

   ret:=emp_fun3(vempno);

   dbms_output.put_line(ret);

   dbms_output.put_line(vempno);

end;

 

 

存储过程与函数区别

1.函数一定要有return 返回,存储过程不需要

 

 

删除存储过程与函数

drop procedure procedurename

drop function  funcname

阅读(2113) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~