zoukankan      html  css  js  c++  java
  • 【转】Oracle 自定义函数语法与实例

    原文地址: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.    
    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;  


    使用与结果:

    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;  

  • 相关阅读:
    UIImageView动画 UISlider控制速度
    python学习笔记——装饰器
    python学习笔记——继承
    python学习笔记——异步IO
    思路清楚的最大堆实现
    推荐几个IDEA必备的好用插件
    记工作中遇到的Date类相关的坑
    navicat数据库表数据复制到excel产生的列错位问题
    submit提交时进行页面验证
    SublimeText3常用快捷键和优秀插件(转载)
  • 原文地址:https://www.cnblogs.com/dirgo/p/8978638.html
Copyright © 2011-2022 走看看