Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104574436
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 16:13:18

 

过程是执行某些操作的子程序,它是执行特定任务的模块.从根本上讲,过程就是命名的PL/SQL程序块,它可以被赋予参数,存储在数据库中,然后由一个应用程序或其他PL/SQL程序调用.而子程序是已命名的PL/SQL块,它们存储在数据中,可以为它们指定参数,可以从任何数据库客户端和应用程序中调用它们.命名的PL/SQL程序包括存储过程和函数,程序包是存储过程和函数的集合.
调用程序是通过参数向被调用的过程传递值的.参数传递的模式有3种:in(输入),out(输出)和in out(输入输出).
OK,下面一起来看实例.
--带输入参数
create or replace procedure pro_test(eno in number)
as
type t_ref is ref cursor;
t t_ref;
rec emp%rowtype;
begin
  open t for select * from emp where deptno=eno;
  loop
      fetch t into rec;
      exit when t%notfound;
      dbms_output.put_line(rec.ename);
  end loop;
  close t;
end pro_test;

--调用
declare
enum number;
begin
enum:=&请输入编号;
pro_test(enum);
end;



--带输出参数
create or replace procedure pro_test(eno in number,e_name out varchar2)
as
begin
  select ename into e_name from emp where empno=eno;
end pro_test;

--调用
declare
enum number;
e_name varchar2(20);
begin
enum:=&请输入编号;
pro_test(enum,e_name);
dbms_output.put_line(e_name);
end;



--带输入输出参数
create or replace procedure pro_test(test1 in out number,test2 in out number)
as
v_test number;
begin
  v_test:=test1;
  test1:=test2;
  test2:=v_test;
end pro_test;
--调用
declare
v1 number;
v2 number;
begin
  v1:=&请输入第一个参数;
  v2:=&请输入第二个参数;
  pro_test(v1,v2);
  dbms_output.put_line(v1||v2);
end;


过程一般用来处理复杂的逻辑程序,而函数则适合用于返回一个值.

函数与过程相似,也是数据库中存储的已命名PL/SQL程序块.函数的主要特性是必须返回一个值.创建函数时通过return子句指定函数返回值的数据类型.
OK,看看创建函数的实例.

--函数
create or replace function f_test(e_num number)
return varchar2
as
e_name varchar2(20);
begin
  select ename into e_name from emp where empno=e_num;
  return e_name;
end;

--调用
declare
e_num number;
e_name varchar2(20);
begin
e_num:=&请输入编号;
e_name:=f_test(e_num);
dbms_output.put_line(e_name);
end;


OK,完成.

 

原文:http://hujing1229.blog.ccidnet.com/blog-htm-do-showone-uid-60604-type-blog-itemid-186300.html


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