免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 872 | 回复: 0
打印 上一主题 下一主题

Oracle子程序【课堂笔记】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:54 |只看该作者 |倒序浏览

存储过程与函数特点

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP