Oracle过程和函数的区别

数据库 Oracle
在Oracle数据库中,过程和函数都以编译后的形式存放在数据库中,二者的主要区别在于他们的调用方式,下文对二者的区别作了详尽的描述,供您参考。

Oracle过程和函数相信大家都比较了解,下面就为您详细介绍Oracle过程和函数二者之间的区别,希望可以让您对Oracle过程和函数有更深的认识。

Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数,没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。Oracle过程是作为一个独立执行语句调用的:

  1. pay_involume(invoice_nbr,30,due_date); 

函数以合法的表达式的方式调用:

  1. 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]   

每个参数的语法如下:

  1. 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.  
  7. BEGIN  
  8. RadiansPerDegree=pi/180;  
  9. RETURN(SIN(DegreesIn*RadiansPerDegree));  
  10. END   


 

 

【编辑推荐】

Oracle to_char函数的使用

oracle函数返回表的实现

带您了解Oracle FBI索引

详解Windows下卸载Oracle数据库

详解Oracle多种表连接方式

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-29 11:27:08

oracle创建存储过

2010-10-25 17:33:35

Oracle数学函数

2018-03-16 08:41:16

Oracle存储函数

2011-05-30 14:30:08

函数存储过程

2011-05-16 13:40:35

dbasysdba

2010-10-28 11:36:16

Oracle用户

2011-05-20 13:34:35

Oracledbasysdba

2010-11-16 15:40:21

oracle游标

2009-05-25 10:00:01

Oraclerownumrowid

2010-07-20 09:52:27

Perl构造函数

2010-09-06 15:41:34

SQL函数存储过程

2023-02-28 11:29:09

存储函数MySQL

2010-11-18 15:46:41

Oracle Deco

2010-04-16 10:11:20

Oracle存储过程

2010-11-19 09:48:48

ORACLE创建实例

2011-05-20 15:59:06

Oracle存储Sql语句

2010-04-07 13:12:25

Oracle存储过程

2023-10-19 08:01:04

FirstLastTake

2010-09-07 08:35:40

DB2常用函数

2010-09-09 09:49:18

SQL函数存储过程
点赞
收藏

51CTO技术栈公众号