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

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

  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 操作"

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

  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;

使用:

  1. select function1(666, 333) from dual;

结果:

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

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

  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. if oriday <= 15 then                              --少于等于15号属于本月
  12. return to_char(oridate, 'yyyymm');
  13. else
  14. if orimonth <= 8 then                           -- 日 <=8 则+1后转char还要补0,单独出来作为一种情况
  15. return to_char(oriyear)||'0'||to_char(orimonth + 1);
  16. elsif( orimonth <= 11 ) then                    -- 日 <= 11则+1后不会跨年,转char不需要补零, 单独出来作为一种情况
  17. return to_char(oriyear)||to_char(orimonth + 1);
  18. else                                            -- 最后一种情况就是跨年, 改变年份, 月份补零就行
  19. return to_char(oriyear + 1)||'0'||to_char(orimonth - 11);
  20. end if;
  21. end if;
  22. end fn_mymonth;

使用与结果:

  1. select fn_mymonth(to_date('2015-12-14', 'yyyy-mm-dd')) from dual;

  1. select fn_mymonth(to_date('2015-12-15', 'yyyy-mm-dd')) from dual;

  1. select fn_mymonth(to_date('2015-12-16', 'yyyy-mm-dd')) from dual;

【转】Oracle 自定义函数语法与实例的更多相关文章

  1. Mybatis下配置调用Oracle自定义函数返回的游标结果集

    在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...

  2. Oracle自定义函数和存储过程示例,自定义函数与存储过程区别

    参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...

  3. Oracle自定义函数1

    用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...

  4. Oracle自定义函数

    核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...

  5. MySQL 自定义函数CREATE FUNCTION实例

    分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (i ...

  6. Oracle自定义函数&加密

    在sql中频繁使用的功能(逻辑.加密等)可以写成自定义函数进行封装,之后再调用即可. CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据 ...

  7. oracle自定义函数:将使用点分隔符的编码转成层级码格式的编码

    维护一个旧的系统,表设计中只有编码,而没有其他排序相关的字段,然后根据编码排序出现了顺序错乱的问题. 详细地说,其编码设计是使用[.]分隔符的编码,比如1.1.1.1.1.1.1.1.1.2这样的格式 ...

  8. Oracle 自定义函数实现列转行效果

    在 Oracle 领域,我相信一说到列转行大部分人都会立马想到 WM_CONCAT 函数,我觉得主要是因为该函数比较实用.但事实上 WM_CONCAT 并非官方公开函数,使用会存在一定的风险:函数返回 ...

  9. mysql自定义函数语法

    创建函数 DELIMITER $$DROP FUNCTION IF EXISTS `test` $$CREATE FUNCTION `test`(a int ,b int)RETURNS int BE ...

随机推荐

  1. yum install mysql56

    官方有写: http://dev.mysql.com/doc/mysql-repo-excerpt/5.6/en/linux-installation-yum-repo.html yum update ...

  2. MySQL -- 全文检索(布尔全文检索)

    modifier的值为in boolean mode的时候,可以使用布尔全文检索.在布尔全文检索中,有些字符在检索字符串的开头或结尾会有特殊含义.在下面的示例中,+和-操作符表明在匹配的时候,单词必须 ...

  3. rhel7 ifconfig command not found

    同事扔过来一个rhel7.2的系统,登录后发现没有安装ifconfig命令: # ifconfig -bash: ifconfig: command not found 先看看环境变量: # echo ...

  4. Mysql命令行改动字段类型

    在做微信公众平台 知识百科(账号:zhishiwiki) 时,由于字段先前设计的不合理.导致内容装不下,因此须要改动其字段类型为 text 这里使用到了 alter 命令 alter table 表名 ...

  5. labview程序性能优化

    课时15: 中级08:LabVIEW运行性能(作者:NI应用工程师 李甫成) 一.避免强制类型转换 二.防止内存泄漏 三.将vi的一部分转化为子vi 四轴项目中所占内存对比,变为子vi后执行速度也快了 ...

  6. J2EEweb开发中的缓存问题的研究

    一般情况下,浏览器都会缓存已经访问过的页面内容,关于如何禁止浏览器缓存的介绍,在网上到处都有相关的文章,但是,关于浏览器如何利用缓存,如何处理缓存的讲解,却鲜有人谈及 .浏览器在访问已缓存过的资源时, ...

  7. Elastalert 监控

    1.logstash 做监控的优劣 适合match-then-alert 的方式 logstash-filter-metric logstash-input-http_poller 无状态.进程间数据 ...

  8. ansible 批量推送公钥

    这里我们使用ansible的playbook 的功能来推送秘钥 使用方法参见:http://blog.csdn.net/magedu_linux/article/details/48529645 这里 ...

  9. 简单理解MapView 以及 设置 MKAnnotationView

    MKMapView  相当于一个容器 .可以展示  MKAnnotationView.. 要使用它需要设置 数据源代理 _mapView.delegate = self; 它的数据源对象就是 符合   ...

  10. RDD转换DataFrame

    Spark SQL有两种方法将RDD转为DataFrame. 1. 使用反射机制,推导包含指定类型对象RDD的schema.这种基于反射机制的方法使代码更简洁,而且如果你事先知道数据schema,推荐 ...