oracle的函数function

先说说functionprocedure的区别与联系

定义:

存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,

经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是由流控制和SQL 语句书写的过程

 

优 点:

1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程可以重复使用,可减少数据库开发人员的工作量。

4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。

 

                                       存储过程与函数的对比

本质上没区别。只是函数有如:

只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。 
     函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 
      1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 
      2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 
      3.    存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 
      4.    当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。 
      

 

1.function函数的语法如下:

      create or replace function function_name (

       argu1 [mode1] datatype1, --定义参数变量

       argu2 [mode2] datatype2 --定义参数变量

   ) return datatype --定义返回的数据类型

  is 

  begin

 

  end;

 

1..不带任何参数的函数                                                           --这种情况平时几乎不用

create or replace function test 

return varchar2 

as

names  varchar2(50); --定义变量

begin 

select   name   into names    from  zy_brry; 

return(names); --返回值

end ;

 2..带有in 、out 参数的

create or replace function test(v_zyh   varchar2 )

    return varchar2

as 

    result  varchar2(10);

begin 

   select   name into result from zy_brry where zyh=v_zyh;

   return result;

end ;

 

--调用

select   test(2012092310)  from    dual 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

关于OUT型的参数,因为函数的返回值只能由一个值,plsql程序可以通过OUT型参数实现多个返回值,

posted @ 2020-03-18 16:01  托马斯骨头收集  阅读(2256)  评论(0编辑  收藏  举报