PLSQL中的重载

时间:2024-05-19 18:36:38

跟其他高级语言一样,PLSQL也支持重载,包括存储过程和函数都可以重载,实际上PLSQL自身的很多函数或过程也都是具有重载的。

比如dbms_output.put_line过程可以打印数字、字符、日期等各种类型;

instr函数对VARCHAR2、Clob类型都支持等等。

下面举个简单的存储过程重载的例子:

在一个包的声明中,定义了print函数,可以打印布尔型、数字型、字符型和日期型变量,其中字符型是2个参数,其他是1个参数。

PLSQL中的重载

具体定义为:

PLSQL中的重载

执行效果如下:

PLSQL中的重载

在实际开发过程中,可能函数重载用到的更普遍一些,实现过程大同小异。但是重载还是要注意几个限制条件:

1.如果2个重载函数参数个数、类型相同,只是参数名称不同,调用时必须使用命名法调用,比如下面这个重载函数,输入参数都是一个number类型

PLSQL中的重载

不用命名法调用程序,会出现错误PLS-00307的错误,采用命名法以后就没有问题,对于参数是子类和父类的情况也是类似的。

PLSQL中的重载

2.另外不能仅靠返回类型不同来定义重载函数,重载是靠输入参数来进行区分的,参数完全一致的话编译器根本无法确定要调用哪个函数。

比如下面这个重载函数,输入参数一样,返回不同类型,包的编译并没有报错:

PLSQL中的重载

调用的时候却报错了,还是刚才那个PLS-00307

PLSQL中的重载