PL/SQL 函数

2024年11月21日 PL/SQL 函数 极客笔记

PL/SQL 函数

PL/SQL函数与PL/SQL过程非常相似。过程和函数的主要区别在于,函数必须始终返回一个值,而过程可以返回值也可以不返回值。除此之外,PL/SQL过程的所有其他内容对于PL/SQL函数也是适用的。

创建函数的语法:

CREATE [OR REPLACE] FUNCTION function_name [parameters]
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
RETURN return_datatype
{IS | AS}
BEGIN
   < function_body >
END [function_name];

这里:

  • Function_name: 指定函数的名称。
  • [OR REPLACE] 选项允许修改现有函数。
  • 可选参数列表 包含参数的名称、模式和类型。
  • IN 表示值将从外部传入,OUT表示此参数将用于返回过程外的值。

函数必须包含一个返回语句。

  • RETURN子句指定了从函数中返回的数据类型。
  • Function_body 包含可执行部分。
  • AS关键字用于创建独立函数,而不是IS关键字。

PL/SQL函数示例

让我们看一个简单的例子来 创建一个函数

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

另一个PL/SQL函数示例

让我们从一个例子中演示如何声明、定义和调用一个简单的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

PL/SQL函数示例使用表

让我们来看一个客户表。这个例子说明了创建和调用一个独立函数。这个函数将返回客户表中的客户总数。

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

Customers Id Name Department Salary
1 alex web developer 35000
2 ricky program developer 45000
3 mohan web designer 35000
4 dilshad database manager 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. 

呼叫PL/SQL函数:

在创建函数时,您必须给出函数要执行的定义。要使用一个函数,您必须调用该函数来执行定义的任务。一旦调用了函数,程序控制就会转移到被调用的函数。

在定义的任务成功完成后,调用函数将程序控制返回到主程序。

要调用一个函数,您必须将所需的参数和函数名一起传递,并且如果函数返回一个值,您可以存储返回的值。以下程序从匿名块调用函数totalCustomers:

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.

PL/SQL 递归函数

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

计算一个数的阶乘的示例

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

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.

PL/SQL 删除函数

删除您创建的函数的语法:

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

DROP FUNCTION function_name;

本文链接:http://so.lmcjl.com/news/18235/

展开阅读全文