个性化阅读
专注于IT技术分析

Oracle函数用法详解

本文概述

函数是用于返回单个值的子程序。你必须在调用函数之前声明并定义一个函数。它可以在同一时间声明和定义, 也可以在同一块中先声明然后定义。

在Oracle中创建函数

句法

CREATE [OR REPLACE] FUNCTION function_name
   [ (parameter [, parameter]) ]
RETURN return_datatype
IS | AS
 [declaration_section]
BEGIN
   executable_section
[EXCEPTION
   exception_section]
END [function_name];

在创建过程或函数之前, 必须先定义一些参数。这些参数是

  • IN:这是默认参数。它将值传递给子程序。
  • OUT:必须指定。它向调用方返回一个值。
  • IN OUT:必须指定。它将初始值传递给子程序, 并将更新后的值返回给调用者。

Oracle函数示例

让我们看一个创建函数的简单示例。

create or replace function adder(n1 in number, n2 in number)  
return number  
is   
n3 number(8);  
begin  
n3 :=n1+n2;  
return n3;  
end;  
/

现在编写另一个程序来调用该函数。

DECLARE  
   n3 number(2);  
BEGIN  
   n3 := adder(11, 22);  
   dbms_output.put_line('Addition is: ' || n3);  
END;  
/

输出

Addition is: 33
Statement processed.
0.05 seconds

另一个Oracle函数示例

让我们以一个示例来演示声明, 定义和调用一个简单的PL / SQL函数, 该函数将计算并返回两个值的最大值。

DECLARE
   a number;
   b number;
   c number;
FUNCTION findMax(x IN number, y IN number) 
RETURN number
IS
    z number;
BEGIN
   IF x > y THEN
      z:= x;
   ELSE
      Z:= y;
   END IF;

   RETURN z;
END; 
BEGIN
   a:= 23;
   b:= 45;

   c := findMax(a, b);
   dbms_output.put_line(' Maximum of (23, 45): ' || c);
END;
/

输出

Maximum of (23, 45): 45
Statement processed.
0.02 seconds

使用表的Oracle函数示例

让我们来一张客户桌。本示例说明了如何创建和调用独立函数。此函数将返回customers表中的CUSTOMERS总数。

创建客户表并在其中有记录。

Customers
Id Name Department Salary
1 alex web developer 35000
2 ricky 程序开发人员 45000
3 mohan 网页设计师 35000
4 dilshad 数据库管理器 44000

创建函数:

CREATE OR REPLACE FUNCTION totalCustomers
RETURN number IS
   total number(2) := 0;
BEGIN
   SELECT count(*) into total
   FROM customers;
    RETURN total;
END;
/

执行完上述代码后, 你将得到以下结果。

Function created.

调用Oracle函数:

DECLARE
   c number(2);
BEGIN
   c := totalCustomers();
   dbms_output.put_line('Total no. of Customers: ' || c);
END;
/

在SQL提示符下执行上述代码后, 你将获得以下结果。

Total no. of Customers: 4
PL/SQL procedure successfully completed.

Oracle递归函数

你已经知道一个程序或一个子程序可以调用另一个子程序。当子程序调用自身时, 它称为递归调用, 该过程称为递归。

计算数字阶乘的示例

让我们以一个例子来计算数字的阶乘。本示例通过递归调用自身来计算给定数字的阶乘。

DECLARE
   num number;
   factorial number;

FUNCTION fact(x number)
RETURN number 
IS
   f number;
BEGIN
   IF x=0 THEN
      f := 1;
   ELSE
      f := x * fact(x-1);
   END IF;
RETURN f;
END;

BEGIN
   num:= 6;
   factorial := fact(num);
   dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);
END;
/

在SQL提示符下执行上述代码后, 将产生以下结果。

Factorial 6 is 720 
PL/SQL procedure successfully completed.

Oracle Drop函数

如果要从数据库中删除创建的函数, 则应使用以下语法。

句法:

DROP FUNCTION function_name;
赞(0)
未经允许不得转载:srcmini » Oracle函数用法详解

评论 抢沙发

评论前必须登录!