自定义函数

----自定义函数:把一些功能/操作封装起来,存在数据库里面,供用户多次使用,不同于sp的是,自定义函数必须要返回一个值(return)
FUN一般用来计算用户的指标

--创建自定义函数的语法结构:
CREATE OR REPLACE FUNCTION 函数名[(参数1 [参数类型] 数据类型[,参数2 参数类型 数据类型......])]
RETURN 返回的数据类型
IS / AS
   --声明部分
BEGIN
  --逻辑体
  --必须有一个 RETURN 子句;
END;
--开发规范:函数名以 FUN_ 开头


--需要注意的是:
1、“RETURN 返回的数据类型” 指的就是 逻辑体里面 RETURN 子句里面的值的类型
2、逻辑体里面必须要有一个RETURN 子句(意思就是:里面必须有一个 RETURN 值/变量)
3、所有的 RETURN 子句 里面的值/变量 的 类型跟 “RETURN 返回的数据类型” 要一致
4、“RETURN 返回的数据类型” 也是只需要定义类型,不能定义长度

--比如:创建一个自定义函数,比较两个数字的大小,并返回较大的数字

CREATE OR REPLACE FUNCTION FUN_BIGGER(X NUMBER,Y NUMBER)
RETURN NUMBER
IS
BEGIN
  IF X > Y THEN 
    RETURN X;
  ELSE 
    RETURN Y;
  END IF;
END;

--调用自定义函数:跟调用内置函数的语法一样
SELECT FUN_BIGGER(1,3) BIGGER FROM DUAL;



--小练习一把:创建一个自定义函数,计算员工表中的员工的平均工资,并保留整数

CREATE OR REPLACE FUNCTION FUN_AVG
RETURN NUMBER
IS
V_AVG NUMBER;
BEGIN
  SELECT ROUND(AVG(SAL))
  INTO V_AVG
  FROM EMP;
  
  RETURN V_AVG;
END;

--调用
SELECT EMPN FROM emp;


---几点:
1、上面的这个自定义函数是针对于某一张特定的表来拿到结果
 那么,这个时候,无论在哪个表中查询,那么返回的都是EMP表中的平均工资取整
2、自定义函数在创建的时候可以借用一切能用的东西(比如:内置函数)来达到目的(简化代码,提高效率)
3、当创建自定义函数没有带参数的时候,在调用的时候可以不带括号。但是最好还是带上,有助于区别于这是个函数,而不是一个列名


---小练习一把:创建自定义函数,根据员工的入职日期,返回该员工缴纳社保的月份(年-月  varchar2)
              --社保缴纳规则:15号之前的当月缴纳,15号之后次月缴纳
 

CREATE OR REPLACE FUNCTION FUN_SBJN(P_DATE DATE)
RETURN VARCHAR2
IS
V_SBJN VARCHAR2(20);
BEGIN
  V_SBJN := TO_CHAR(ROUND(P_DATE,'MM'),'YYYY-MM');
  
  RETURN V_SBJN;
END;

--测试一下
SELECT FUN_SBJN(SYSDATE) FROM DUAL;

SELECT E.*,FUN_SBJN(E.HIREDATE) 社保缴纳月份
FROM EMP E;




---fun跟sp的相同跟不同

--相同的地方:
1、语法结构上相似
2、都是起到封装的作用
3、都是将一些功能/操作/逻辑封装起来,存在数据库里面,便于后续的多次使用

--不同的地方:
1、sp不需要返回值
   fun必须要返回一个值
2、sp主要用于数据同步
   fun主要用于计算指标
3、sp在其他的代码块里调用
   fun跟内置函数一样的调用,放在select后面

















 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为企业级大型、通用对象关系型数据库管理系统,神通数据库为用户提供的功能包括: • 支持丰富的数据类型 神通数据库所支持的数据类型包括:字符串类型、位串类型、精确数值类型、布尔型、近似数值类型、 日期类型、时间间隔类型、货币类型、二进制大对象、字符型大对象等。 • 提供功能强大的内置函数 神通数据库系统提供了丰富的内置函数,并可以根据用户的实际需要,定制特殊的函数。系统提供的内 置函数主要包括:数学函数、字符串函数、日期时间函数、类型转换函数聚集函数等。 • 支持视图 神通数据库对数据视图提供了完善的支持,从而允许不同的用户或应用程序以不同的方式查看同一数 据。该项功能不仅使数据更易于访问,而且可以利用它限制某些用户能够查看或更新的行和列。视图可以有 效地减少数据库中的数据冗余,并为实现灵活的数据安全机制提供了基础。 • 支持存储过程 使用数据库创建应用程序时,过程语言是应用程序和数据库之间的主要编程接口。神通数据库中所提 供的过程语言是 plOSCAR。在使用 plOSCAR 程序时,可用两种方法存储和执行程序。可以在本地存储程 序,并创建向数据库发送命令并处理结果的应用程序;也可以将程序在数据库中存储为存储过程,并创建执 行存储过程并处理结果的应用程序。 • 完整性约束机制 神通数据库使用约束来自动强制数据库完整性的方式。约束定义关于列中允许值的规则,是强制完整性 的标准机制。在神通数据库中,支持五类约束: NOT NULL 指定不接受 NULL 值的列。 CHECK 约束对可以对放入列中的值进行限制,以强制执行域的完整性。 UNIQUE 约束在列集内强制执行值的唯一性。 PRIMARY KEY 约束标识列或列集,这些列或列集的值唯一标识表中的行。 FOREIGN KEY 约束标识表之间的关系。 • 支持触发器 在神通数据库系统中,触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效 被触发执行。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并 9 可以包含复杂的 plOSCAR 语句。神通数据库触发器按照所触发动作的间隔尺寸可以分为语句级触发器和行 级触发器。触发器由 CREATE TRIGGER 语句定义,FOR EACH 子句定义了触发动作的间隔尺寸,它既 可以是 FOR EACH STATEMENT(语句级触发器),也可以是 FOR EACH ROW(行级触发器)。 • 支持事务处理 神通数据库提供了高效的事务管理机制,保证每个事务的完整性。该机制提供: 锁定机制,使事务相互隔离。 记录机制,保证事务的持久性。即使服务器硬件、操作系统或数据库自身出现故障,也可以在重新启动 时使用事务日志,将所有未完成的事务自动地回滚到系统出现故障的位置。 事务管理特性,强制保持事务的原子性和一致性。事务启动之后,就必须成功完成,否则数据库系统将 撤消该事务启动之后对数据所作的所有修改。 在神通数据库中一个事务可以由一条或多条 sql 语句构成。事务的提交状态可以是自动提交也可以是手 动提交。有关事务的控制命令包括 BEGIN,COMMIT,ROLLBACK。 • 支持模式 一个数据库可以包含一个或多个命名的模式,一个模式内可以包含多个表。不同的模式中的表名可以相 同,而同一模式中的表不能同名。模式如同操作系统级的目录,但是模式不能嵌套。 用户在相应权限控制下可以访问所连接的数据库中的任何模式中的对象。 模式具有以下特点: 多个用户使用同一数据库而不会互相影响。 对数据库中的对象进行逻辑分组,更便于管理。 各个应用分别使用各自的模式,以避免命名冲突。 在模式中创建数据库对象或访问模式中的对象时,可在对象名前指定模式名。 • 支持数据备份和恢复 神通数据库的备份/恢复工具具有图形化的操作界面。用户利用备份工具可以对整个数据库、指定数据 库、或者指定库中的特定表执行备份操作。备份的数据被保存在用户指定的目录中。利用备份文件,用户可 以利用配套的恢复工具执行恢复操作。备份和恢复工具都提供丰富的选项,以满足不同用户的备份和恢复要 求。 • 支持数据迁移 神通数据库的数据导入和导出向导是前台管理工具中的一个实用工具,其主要功能是进行神通数据库 与其它各种异构数据源之间数据的析取、转换以及合并。数据导入和导出工具支持的数据源包括:神通数据 库、Oracle、Microsoft SQL Server、IBM DB2、Microsoft Excel 97-2000、文本文件、其他支持 ODBC 的 数据源。在数据的转换过程中,向导能根据源数据和目标数据具体类型,通过内置的转换规则提供数据类型 的默认映射关系、数据类型的精度匹配、空与非空信息提取、主键及相关索引建立等辅助功能,帮助用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值