zoukankan      html  css  js  c++  java
  • SQL记录-PLSQL函数

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

    这里,

    • function-name 指定函数的名称

    • [OR REPLACE] 选项允许修改现有的函数

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

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

    • RETURN 子句指定要在函数返回的数据类型

    • function-body 包含可执行部分

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

    示例:

    下面的示例说明创建和调用一个独立的函数。函数返回在CUSTOMERS表中的客户总数。我们将使用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.
    

    调用一个函数

    当创建一个函数,给定什么样的函数之前必须做一个定义。要使用函数必须调用该函数来执行规定的任务。当程序调用的函数,程序控制被转移到所调用的函数。

    调用函数定义执行任务时,被执行的return语句或达到其最后一个语句,程序控制返回到主程序。

    调用函数只需要通过必要的参数以及函数名称,如果函数返回一个值,那么可以存储返回值。下面的程序是调用一个匿名块函数 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.
  • 相关阅读:
    关于C语言字符串
    进程间通信方式总结
    数据结构(3)-----链表
    Oracle查看用户所在表空间
    oracle linux了解基本命令行
    关于分区技术的索引 index
    oracle闪回表详解
    转:深入学习Oracle分区表及分区索引
    第一章 基本的SQL语句 (SQL基础)
    linux根分区扩容
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7721986.html
Copyright © 2011-2022 走看看