首页 > 数据库 >无涯教程-PL/SQL - 函数(Functions)

无涯教程-PL/SQL - 函数(Functions)

时间:2023-12-22 19:02:02浏览次数:41  
标签:Functions END 函数 number 无涯 SQL RETURN BEGIN

在本章中,无涯教程将讨论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];

以下示例说明了如何创建和调用独立函数。此函数返回customers表中CUSTOMERS的总数。

无涯教程将使用在PL/SQL变量一章中创建的CUSTOMERS表-

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语句或到达 last end语句时,将程序控制权返回给主程序。

要调用函数,您只需要传递所需的参数以及函数名称,如果函数返回值,则可以存储返回的值。以下程序从匿名块中调用函数 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. 

递归函数

无涯教程已经看到一个程序或子程序可以调用另一个子程序,当子程序调用自身时,称为递归调用,该过程称为递归。

为了说明这个概念,让无涯教程计算一个数字的阶乘。 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.

参考链接

https://www.learnfk.com/plsql/plsql-functions.html

标签:Functions,END,函数,number,无涯,SQL,RETURN,BEGIN
From: https://blog.51cto.com/u_14033984/8937740

相关文章

  • MYSQL LIKE 优化
    1、多字段like模糊查询优化:最常见的写法:wherealike'%xx%'orblike'%xx%'orclike'%xx%'这种写法查询效率低,经过调查,下面的方法可以替代,并且效率高:2、如果like的关键字相同:whereinstr(nvl(a,'')||nvl(b,'')||nvl(c,''),'xx')>0把要模糊......
  • 无涯教程-PL/SQL - 存储过程(Procedures)
    在模式级别,存储过程是独立子程序,它是使用CREATEPROCEDURE或CREATEFUNCTION语句创建的,它存储在数据库中,可以使用DROPPROCEDURE或DROPFUNCTION语句删除。PL/SQL子程序被称为PL/SQL块,可以使用一组参数来调用它们。PL/SQL提供两种子程序-Functions  -这些函数返回单个值,主......
  • mysql-binlog恢复命令
    查看是否开启binloq:showvariableslike'logbing';开启binlog:log-bin="LAPTOP-7FRIEVH7-bin关闭binlog:skip-log-bin生成新的binlog文件:方式一:重启mysq1服务使用命令flushlogs方式二:查看binlogshowbinlogeventsin'ECS-56099351-bin.00001';将binlog日志并......
  • 将excel数据导入到SQL server数据库的详细过程
    原文链接:https://www.xjx100.cn/news/415146.html?action=onClick1.将要导入的excel表格数据如下,第一行数据默认为数据库表中的字段,所以这个必须要有,否则无法映射导入。如下图(只截部分数据) 2.打开MicrosoftSQLServerManagementStudio17数据库管理软件,选中要导入的mydb数......
  • Scrapy爬网站数据,存到MySQL
    一、框架简介1.1、简介  Scrapy框架是用纯Python实现的一个为了爬取网站数据、提取结构性数据而编写的可扩展的开源应用框架,只需要少量代码就能够快速地实现数据爬取。往往手写一个爬虫需要进行发送网络请求、数据解析、数据存储、反反扒机制、异步请求等步骤,如果都从零开始......
  • cpp-opt-mysql
    title:c++操作mysql数据库author:TokisakiGalaxytop:falsecover:falsetoc:truecomments:truemathjax:falsenoindex:falsesitemap:truedate:2020-09-1214:17:04img:coverImg:excerpt:C++操作mysql数据库tags:-C++-mysqlcategories:-编程pas......
  • 关于debezium同步mysql字段类型的datetime、date、time、timestamp的格式转换说明
    1.情景展示使用debezium的插件:debezium-connector-oracle(io.debezium.connector.mysql.MySqlConnector),自动读取mysql日志binlog相关表的数据变更记录,然后将其发布到kafkatopic当中。现在遇到的问题是:在mysql当中,表示日期类型的数据类型有:datetime、date和timestamp;表示时间......
  • mysql给指定账号取消drop权限
    要修改MySQL用户的权限,可以使用以下步骤:1、登录MySQL服务器:mysql-uroot-p2、选择数据库:如果要修改用户在特定数据库中的权限,可以选择对应的数据库。例如:USEyour_database;3、查看当前用户权限:SHOWGRANTSFOR'username'@'hostname';将'username'替换为要修......
  • MySQL数据库-2
    MySQL数据库-2第09章子查询#第09章子查询SELECTlast_name,salaryFROMemployeesWHEREsalary>( SELECTsalary FROMemployees WHERElast_name='Abel' );#2.单行子查询SELECTemployee_id,manager_id,department_idFROMemployeesWHERE(manager_id,depart......
  • zabbix5.0监控postgresql13.6
    环境描述zabbix版本:5.0.12PG版本:13.6监控需求监控postgresql运行情况(非核心业务,主要监控挂没挂)监控流复制运行情况如有异常,则告警具体步骤在postgresql上创建监控用户,授权,并配置pg_hba.conf文件允许通过该用户去访问到zabbix的网站上下载监控脚本将脚本部署在po......