热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转】Oracle自定义函数语法与实例

原文地址:https:blog.csdn.netlibertine1993articledetails47264211Oracle自定义函数的语法如下:[sq

原文地址:https://blog.csdn.net/libertine1993/article/details/47264211

Oracle自定义函数的语法如下:

[sql]  view plain copy
  1. create or replace function 函数名(参数1 模式 参数类型)  
  2. return 返回值类型  
  3. as  
  4. 变量1 变量类型;  
  5. 变量2 变量类型;  
  6. begin  
  7.     函数体;  
  8. end 函数名;  

 

参数的模式有3种:(如果没有注明, 参数默认的类型为 in.)

in: 为只读模式, 在函数中, 参数的值只能被引用, 不能被改变;

out: 为只写模式, 只能被赋值, 不能被引用;

in out:  可读可写.

提醒:
1.在Oracle自定义函数中, else if 的正确写法是 elsif 而不是 else if
2.使用 if 需要加 then  "if 条件 then 操作"

 

简单的例子: 读入两个值, 返回比较大的值

[sql]  view plain copy
  1. create or replace function function1(para1 in number, para2 in number)   
  2. return number   
  3. as   
  4. begin  
  5.   if para1 > para2 then  
  6.       return para1;  
  7.   else  
  8.       return para2;   
  9.   end if;  
  10. end function1;  

使用:

[sql]  view plain copy
  1. select function1(666, 333) from dual;  


结果:

 

另一个例子可能在实际中会用到, 有时候我们需要按非自然月进行数据统计, 这种时候我们只需要写一个自定义的函数处理日期就行了.

函数说明: 读入date型日期, 大于15号的归入下一个月, 小于等于15号归入本月

[sql]  view plain copy
  1. create or replace function fn_mymonth(oridate in date)  
  2. return varchar2  
  3. as  
  4.   oriday number;  
  5.   orimonth number;  
  6.   oriyear number;   
  7. begin  
  8.   oriday := to_number(to_char(oridate, 'dd'));  
  9.   orimonth := to_number(to_char(oridate, 'mm'));  
  10.   oriyear := to_number(to_char(oridate, 'yyyy'));  
  11.    
  12.   if oriday <= 15 then                              --少于等于15号属于本月  
  13.     return to_char(oridate, 'yyyymm');  
  14.   else  
  15.     if orimonth <= 8 then                           -- 日 <=8 则+1后转char还要补0,单独出来作为一种情况  
  16.       return to_char(oriyear)||'0'||to_char(orimonth + 1);  
  17.     elsif( orimonth <= 11 ) then                    -- 日 <= 11则+1后不会跨年,转char不需要补零, 单独出来作为一种情况  
  18.       return to_char(oriyear)||to_char(orimonth + 1);  
  19.     else                                            -- 最后一种情况就是跨年, 改变年份, 月份补零就行  
  20.       return to_char(oriyear + 1)||'0'||to_char(orimonth - 11);  
  21.     end if;  
  22.   end if;  
  23. end fn_mymonth;  


使用与结果:

[sql]  view plain copy
  1. select fn_mymonth(to_date('2015-12-14', 'yyyy-mm-dd')) from dual;  

[sql]  view plain copy
  1. select fn_mymonth(to_date('2015-12-15', 'yyyy-mm-dd')) from dual;  

 

[sql]  view plain copy
  1. select fn_mymonth(to_date('2015-12-16', 'yyyy-mm-dd')) from dual;  


推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • Oracle 用户锁定问题及解决方法
    本文介绍了如何在 Oracle 数据库中检查和处理用户锁定问题,包括查询被锁定的用户、解锁用户以及调整登录失败次数限制的方法。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文介绍了在 MySQL 中如何使用正则表达式来提高查询效率,通过具体示例展示了如何筛选包含中文字符的记录,并详细解释了正则表达式的各种特殊字符和结构。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在处理数据库中所有用户表的彻底清除时,目前尚未发现单一命令能够实现这一目标。因此,需要采用一种较为繁琐的方法来逐个删除相关表及其结构。具体操作可以通过编写PL/SQL脚本来实现,该脚本将动态生成并执行删除表的SQL语句。尽管这种方法相对复杂,但在缺乏更简便手段的情况下,仍是一种有效的解决方案。未来或许可以通过数据库管理工具或更高版本的数据库系统提供更简洁的处理方式。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
author-avatar
悠闲自在的鱼叫_688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有