度量快速开发平台-专业、快速的软件定制快开平台

标题: Oracle过程与函数的区别分析 [打印本页]

作者: 万望    时间: 2020-6-12 07:48
标题: Oracle过程与函数的区别分析
本帖最后由 万望 于 2016-1-12 07:48 编辑

在Oracle数据库中,过程和函数都以编译后的形式存放在数据库中,二者的主要区别在于他们的调用方式,下文对二者的区别作了详尽的描述:
Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数,没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。Oracle过程是作为一个独立执行语句调用的:
pay_involume(invoice_nbr,30,due_date);
函数以合法的表达式的方式调用:
order_volumn:=open_orders(SYSDATE,30);
创建过程的语法如下:
  1. CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name
  2. [parameter_lister]
  3. {AS|IS}
  4. declaration_section
  5. BEGIN
  6. executable_section
  7. [EXCEPTION
  8. exception_section]
  9. END [procedure_name]

复制代码


每个参数的语法如下:


paramter_name mode datatype [(:=|DEFAULT) value]
mode有三种形式:IN、OUT、INOUT。
IN表示在调用过程的时候,实际参数的取值被传递给该过程,形式参数被认为是只读的,当过程结束时,控制会返回控制环境,实际参数的值不会改变。
OUT在调用过程时实际参数的取值都将被忽略,在过程内部形式参数只能是被赋值,而不能从中读取数据,在过程结束后形式参数的内容将被赋予实际参数。
INOUT这种模式是IN和OUT的组合;在Oracle过程内部实际参数的值会传递给形式参数,形势参数的值可读也可写,过程结束后,形势参数的值将赋予实际参数。
创建函数的语法和过程的语法基本相同,唯一的区别在于函数有RETUREN子句

  1. CREATE [ OR REPLACE] FINCTION [schema.]function_name
  2. [parameter_list]
  3. RETURN returning_datatype
  4. {AS|IS}
  5. declaration_section
  6. BEGIN
  7. executable_section
  8. [EXCEPTION]
  9. exception_section
  10. END [procedure_name]
复制代码


在执行部分函数必须有哟个或多个return语句。
在创建函数中可以调用单行函数和组函数,例如:

  1. CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER)
  2. RETURN NUMBER
  3. IS
  4. pi NUMBER=ACOS(-1);
  5. RadiansPerDegree NUMBER;

  6. BEGIN
  7. RadiansPerDegree=pi/180;
  8. RETURN(SIN(DegreesIn*RadiansPerDegree));
  9. END

复制代码


作者: 万望    时间: 2020-6-12 07:48
深入了解,多多学西
作者: 张兴康    时间: 2020-6-12 14:03


作者: 王爱东    时间: 2020-6-12 14:14
你这个是简单了解,还没深入。
作者: 陈晓龙    时间: 2020-6-12 15:55
写得好!




欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) Powered by Discuz! X3.2