codecamp

PL / SQL函数

PL / SQL的功能是一样的,除了它返回一个值的过程。因此,上一章的所有讨论都是真正的功能了。

创建函数

使用CREATE FUNCTION语句创建一个独立的功能。为CREATE OR REPLACE PROCEDURE语句的简化的语法如下:

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

哪里,

  • 函数名指定函数的名称。

  • [OR REPLACE]选项允许修改现有的功能。

  • 可选的参数列表包含名称,模式和类型的参数。在表示该值将来自外部的传递和OUT表示该参数将被用于该过程的外面返回一个值。

  • 该函数必须包含一个return语句。

  • RETURN子句指定数据类型你会从函数返回。

  • 函数体包含了可执行的部分。

  • AS关键字被用来代替IS关键字来创建一个独立的函数。

例:

下面的例子说明创建和调用一个独立的功能。该函数返回客户的客户表中的总数。我们将使用CUSTOMERS表,这是我们在创造了PL / SQL变量章节:

Select * from customers;

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
+----+----------+-----+-----------+----------+
CREATE OR REPLACE FUNCTION totalCustomers
RETURN number IS
   total number(2) := 0;
BEGIN
   SELECT count(*) into total
   FROM customers;
   
   RETURN total;
END;
/

在上面的代码中使用SQL提示执行,会产生以下结果:

Function created.

调用一个函数

在创建一个函数,你给什么样的功能,必须做一个定义。要使用的功能,你将不得不调用该函数来执行定义的任务。当程序调用的函数,程序控制被转移到所调用的函数。

被调用函数执行确定的任务,并执行其返回语句时或到达上次结束发言时,返回程序控制返回到主程序。

给你打电话只需用传递函数名以及所需参数的函数,如果函数返回一个值,那么你可以存储返回值。下面的程序调用从一个匿名块功能totalCustomers:

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

当上述代码在SQL提示符执行时,它产生了以下结果:

Total no. of Customers: 6

PL/SQL procedure successfully completed.

例:

下面是一个例子这表明声明,定义和调用,计算并返回最大两个值中的一个简单的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;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Maximum of (23,45): 45 

PL/SQL procedure successfully completed.

PL / SQL递归函数

我们已经看到,程序或子程序可以调用另一个子程序。当子程序调用自身,它被称为递归调用,过程被称为递归。

为了说明这个概念,让我们计算一个数的阶乘。一个数n阶乘定义为:

n! = n*(n-1)!
   = n*(n-1)*(n-2)!
      ...
   = n*(n-1)*(n-2)*(n-3)... 1

下面的程序通过调用自身递归地计算给定数的阶乘:

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基本语法
PL / SQL数据类型
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }