在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ PL/SQL函數(shù)
PL/SQL記錄
PL/SQL基本語(yǔ)法
PL/SQL集合
PL/SQL包
PL/SQL關(guān)系運(yùn)算符
PL/SQL比較運(yùn)算符
PL/SQL條件控制
PL/SQL字符串
PL/SQL算術(shù)運(yùn)算符
PL/SQL變量
PL/SQL IF-THEN-ELSIF語(yǔ)句
PL/SQL函數(shù)
PL/SQL異常
PL/SQL FOR循環(huán)語(yǔ)句
PL/SQL日期及時(shí)間
PL/SQL EXIT語(yǔ)句
PL/SQL DBMS輸出
PL/SQL過(guò)程
PL/SQL CONTINUE語(yǔ)句
PL/SQL數(shù)組
PL/SQL嵌套IF-THEN-ELSE語(yǔ)句
PL/SQL事務(wù)
PL/SQL CASE語(yǔ)句
PL/SQL IF-THEN語(yǔ)句
PL/SQL GOTO語(yǔ)句
PL/SQL運(yùn)算符優(yōu)先級(jí)
PL/SQL觸發(fā)器
PL/SQL運(yùn)算符
PL/SQL教程
PL/SQL WHILE循環(huán)語(yǔ)句
PL/SQL面向?qū)ο?/span>
PL/SQL循環(huán)
PL/SQL邏輯運(yùn)算符
PL/SQL IF-THEN-ELSE語(yǔ)句
PL/SQL數(shù)據(jù)類型
PL/SQL環(huán)境安裝設(shè)置
PL/SQL游標(biāo)
PL/SQL基本循環(huán)語(yǔ)句
PL/SQL搜索CASE語(yǔ)句
PL/SQL常量和文字
PL/SQL嵌套循環(huán)

PL/SQL函數(shù)

PL/SQL函數(shù)與過(guò)程相同,不同之處在于函數(shù)有一個(gè)返回值。因此,前面的章節(jié)中的所有討論都適用于函數(shù)。

創(chuàng)建函數(shù)

建立一個(gè)獨(dú)立函數(shù)可以使用CREATE FUNCTION語(yǔ)句創(chuàng)建。CREATE OR REPLACE PROCEDURE語(yǔ)句簡(jiǎn)化語(yǔ)法如下:

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

這里,

  • function-name 指定函數(shù)的名稱

  • [OR REPLACE] 選項(xiàng)允許修改現(xiàn)有的函數(shù)

  • 可選的參數(shù)列表中包含的名稱,模式和類型的參數(shù)。IN表示該值將被從外部傳遞和OUT表示該參數(shù)將被用于過(guò)程外面返回一個(gè)值

  • 函數(shù)必須包含一個(gè)return語(yǔ)句

  • RETURN 子句指定要在函數(shù)返回的數(shù)據(jù)類型

  • function-body 包含可執(zhí)行部分

  • AS關(guān)鍵字來(lái)代替了IS關(guān)鍵字用于創(chuàng)建一個(gè)獨(dú)立的函數(shù)

示例:

下面的示例說(shuō)明創(chuàng)建和調(diào)用一個(gè)獨(dú)立的函數(shù)。函數(shù)返回在CUSTOMERS表中的客戶總數(shù)。我們將使用CUSTOMERS表,已在前面PL/SQL變量的章節(jié)中創(chuàng)建:

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;
/

當(dāng)上面的代碼中使用SQL提示執(zhí)行,它會(huì)產(chǎn)生以下結(jié)果:

Function created.

調(diào)用一個(gè)函數(shù)

當(dāng)創(chuàng)建一個(gè)函數(shù),給定什么樣的函數(shù)之前必須做一個(gè)定義。要使用函數(shù)必須調(diào)用該函數(shù)來(lái)執(zhí)行規(guī)定的任務(wù)。當(dāng)程序調(diào)用的函數(shù),程序控制被轉(zhuǎn)移到所調(diào)用的函數(shù)。

調(diào)用函數(shù)定義執(zhí)行任務(wù)時(shí),被執(zhí)行的return語(yǔ)句或達(dá)到其最后一個(gè)語(yǔ)句,程序控制返回到主程序。

調(diào)用函數(shù)只需要通過(guò)必要的參數(shù)以及函數(shù)名稱,如果函數(shù)返回一個(gè)值,那么可以存儲(chǔ)返回值。下面的程序是調(diào)用一個(gè)匿名塊函數(shù) totalCustomers:

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

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Total no. of Customers: 6

PL/SQL procedure successfully completed.

例子:

下面就是一個(gè)例子這表明聲明,定義和調(diào)用一簡(jiǎn)單的PL/SQL函數(shù),計(jì)算并返回兩個(gè)值中的最大值。

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;
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Maximum of (23,45): 45 

PL/SQL procedure successfully completed.

PL/SQL遞歸函數(shù)

我們已經(jīng)看到,程序或子程序可以調(diào)用另一個(gè)子程序。當(dāng)子程序調(diào)用自身,它被稱為遞歸調(diào)用。

為了說(shuō)明這個(gè)概念,讓我們計(jì)算一個(gè)數(shù)的階乘。一個(gè)數(shù)n的階乘定義為:

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

下面的程序計(jì)算給定數(shù)的階乘通過(guò)調(diào)用自身遞歸:

上一篇:PL/SQL數(shù)據(jù)類型下一篇:PL/SQL嵌套循環(huán)