`

Oracle函数重载方法

阅读更多
最近项目搞规则引擎,然后涉及到数据库的日期比较,而业务链比较长,再加上动态表的日期数据存的都是字符串,还有的业务表日期存的就是date类型数据,这样一来无法选用to_char 或者 是to_date ,所以写了个重载函数,直接返回的数据类型为date

我写了个oracle函数重载的demo 拿出来分享下,如下

CREATE OR REPLACE PACKAGE MyOverloadFunc AS
  --@author:lidongbo
  FUNCTION MyFunc(p_param IN NUMBER)
    RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(MyFunc, WNDS, RNDS, WNPS, RNPS);

  FUNCTION MyFunc(p_param IN DATE)
    RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(MyFunc, WNDS, RNDS, WNPS, RNPS);

  FUNCTION MyFunc(p_param IN VARCHAR2)
    RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(MyFunc, WNDS, RNDS, WNPS, RNPS);
  
  FUNCTION MyFunc(p_param OUT VARCHAR2)
    RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(MyFunc, WNDS, RNDS, WNPS, RNPS);
  
  FUNCTION MyFunc(p_paramA in VARCHAR2,p_ParamB in NUMBER)
    RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(MyFunc, WNDS, RNDS, WNPS, RNPS);  
END MyOverloadFunc ;


CREATE OR REPLACE PACKAGE BODY MyOverloadFunc AS
  --@author:lidongbo
  FUNCTION MyFunc(p_param IN NUMBER)
    RETURN VARCHAR2 IS
  BEGIN
    RETURN 'NUMBER';
  END MyFunc;

  FUNCTION MyFunc(p_param IN DATE)
    RETURN VARCHAR2 IS
  BEGIN
    RETURN 'DATE';
  END MyFunc;

  FUNCTION MyFunc(p_param IN VARCHAR2)
    RETURN VARCHAR2 IS
  BEGIN
    RETURN 'IN VARCHAR2';
  END MyFunc;
  
  FUNCTION MyFunc(p_param OUT VARCHAR2)
    RETURN VARCHAR2 IS
  BEGIN
    RETURN 'OUT VARCHAR2';
  END MyFunc;
  
  FUNCTION MyFunc(p_paramA in VARCHAR2,p_paramB in NUMBER)
    RETURN VARCHAR2 IS
  BEGIN
    RETURN 'VARCHAR2 ,  NUMBER  ';
  END MyFunc;
END MyOverloadFunc;




客户程序

SELECT MyOverloadFunc.MyFunc(999) FROM Dual;
--结果:NUMBER

SELECT MyOverloadFunc.MyFunc(SYSDATE) FROM Dual;
--结果:DATE

SELECT MyOverloadFunc.MyFunc('string') FROM Dual;  
--异常,原因不支持同个数同类型参数而IN OUT 不同重载

SELECT MyOverloadFunc.MyFunc('string',999) FROM Dual;
--结果:VARCHAR2 ,  NUMBER 










1
0
分享到:
评论
2 楼 ldbjakyo 2010-08-13  
 
1 楼 ldbjakyo 2010-08-13  
很多人都说,参数个数一致不支持重载,我办到了

相关推荐

    精通Oracle.10g.PLSQL编程

    SQL函数 5.1 数字函数 5.2 字符函数 5.3 日期时间函数 5.4 转换函数 5.5 集合函数 5.6 其他单行函数 5.7 分组函数 5.8 对象函数 5.9 习题第 6章 访问Oracle 6.1 检索...

    oracle学习资料

    §7.5 子程序重载 13 §7.6 删除过程、函数和包 13 §7.7 包的管理 13 第八章 触发器 13 §8.1 触发器类型 13 §8.1.1 DML触发器 13 §8.1.2 替代触发器 13 §8.1.3 系统触发器 13 §8.2 创建触发器 13 §8.2.1 ...

    Oracle 10g 开发与管理

    5.重载 77 6.管理程序包和执行权限 77 8.4依赖性 78 练习 78 第九讲 索 引 80 一.了解索引 80 1.B树索引(Balanced) 80 2.位图索引 80 3.反向索引 81 4.基于函数的索引 81 二. 创建索引 81 1.B树索引 81 2....

    Oracle_plsql讲义:第23章 使用子程序和包.ppt

    * 依赖:数据字典记录了存储过程或函数所引用的所有 Oracle 对象 * 自动重编译 : 如果一个依赖对象失效, PL/SQL 引擎将在该对象再次被调用时对其重新进行编译 * 包的依赖性:包体的变化不会导致修改包头 * 如何确定...

    plsql_oracle 编程

    §7.5 子程序重载 13 §7.6 删除过程、函数和包 13 §7.7 包的管理 13 第八章 触发器 13 §8.1 触发器类型 13 §8.1.1 DML触发器 13 §8.1.2 替代触发器 13 §8.1.3 系统触发器 13 §8.2 创建触发器 13 §8.2.1 ...

    plsql_oracle 8i 编程讲义

    §7.5 子程序重载 13 §7.6 删除过程、函数和包 13 §7.7 包的管理 13 第八章 触发器 13 §8.1 触发器类型 13 §8.1.1 DML触发器 13 §8.1.2 替代触发器 13 §8.1.3 系统触发器 13 §8.2 创建触发器 13 §8.2.1 ...

    SQLHelper数据库操作组件

    SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,SqlHelper有很多版本,主要以微软一...每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

    SqlHelper ado.net

    SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软...每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

    java面试800题

    Q0036 如何创建oracle函数索引 "SQL>create index non_fbi on sale_contacts (surname); SQL>analyze index non_fbi compute statistics; SQL>:analyze table sale_contacts compute statistics; SQL>SELECT ...

    轻松学C#(图解版)

    第二篇是面向对象基础篇,主要介绍类、对象、字段、方法、流程控制、数组、继承、属性、运算符重载、接口等C#基本内容。第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、...

    Java面试笔试题

    1、数据库性能优化有那些措施(ORACLE/SYBASE/DB2/SQLSERVER选一种)2、写一个程序,把字符串倒叙,要求“你好呀”变为“呀好你”(处理中文)3、名次解释(继承、重载、接口)4、JAVA线程实现有那些方法,说明之5、...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    JAVA面试题最全集

    被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 ...

    java 面试题 总结

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...

    C++教程网

    Oracle数据库:Oracle数据库基础、ER模型、数据库系统的开发流程、数据库设计、POWERDESIGNER工具使用、ORACLE体系结构、DDL、DML、PLSQL、存储过程、触发器、函数、游标。 PRO C编程:PRO C程序设计、宿主变量、...

    ADO.net访问数据库的工具类

    ADO.net访问数据库的工具类,资源文件直接支持访问sqlserver数据库,稍微修改 之后可以支持对db2,oracle,mysql等关系型数据库...支持事务,非事务,离线访问,在线访问,并且提供了大量的重载函数,方便调用者使用。

    超级有影响力霸气的Java面试题大全文档

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别?  error 表示恢复...

    Java面试宝典2020修订版V1.0.1.doc

    14、构造器可不可以被重载或重写? 16 15、Java中有没有多继承? 16 16、抽象类和接口的区别? 17 17、java中实现多态的机制是什么? 17 19、String和StringBuffer的区别?StringBuffer和StringBuilder区别? 17 21...

Global site tag (gtag.js) - Google Analytics