1. 苏葳的备忘录首页
  2. 数据库

PL/SQL中的包与重载函数

oracle pl/sql 包PL/SQL不同于sybase或mssql的tsql,具有类似高级语言的复杂语法和功能。它的包中可定义类型,常量变量及函数过程等,作用域可分为公有或私有,还有重载函数,这就提供了一些类似于面向对象语言的特征。在一个大型项目中,我们可将实现相关功能的一组数据库元素组织为一个包,隐藏不需要对外暴露的内部接口和数据等。包的定义和实现类似于C++中的类的定义和实现,包和包体需分别定义:

CREATE OR REPLACE PACKAGE testpkg IS
  -- Author  : ADMINISTRATOR
  -- Created : 2012-2-27 14:42:44
  -- Purpose :
  -- Public type declarations
  -- Public function and procedure declarations
  FUNCTION getparam(aaa NUMBER) RETURN VARCHAR2;
  FUNCTION getparam(aaa VARCHAR2) RETURN VARCHAR2;
END testpkg;

可以看到,这个包定义了两个公有函数getparam,仅参数类型不同,返回类型必须相同。这点上与C++之类并无区别。

CREATE OR REPLACE PACKAGE BODY testpkg IS
  -- Private type declarations
  -- Function and procedure implementations
  FUNCTION getparam(aaa IN NUMBER) RETURN VARCHAR2 IS
  BEGIN
    RETURN('number~');
  END;
  FUNCTION getparam(aaa IN VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
    RETURN('varchar2~');
  END;
END testpkg;

包体是实现,此时测试两个函数:

select testpkg.getparam(11) from dual;
select testpkg.getparam(‘111’) from dual;

可看到分别有不同的输出,显然重载机制分别调用了不同的函数实现。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/348.html

发表评论

邮箱地址不会被公开。 必填项已用*标注