如果形参只是在数值数据类型上不同,也是可以重载的。这个技术用于写数学应用程序的接口,因为多个函数的版本可以使用相同的名称,每个可以接受不同的数值类型。
为了避免给这样的子程序传递参数时造成不必要的麻烦:
n 确保对于每个期待的参数的集合,希望的版本的子程序被调用。例,有重载的子程序可以接受binary_float和binary_double,如果你传递的是VARCHAR2类型的参数,’0.5’,则会调用哪个函数呢?
n 修饰数字字面量并使用转换函数来明确希望的参数类型。例5.0f表示为binary_float, 5.0d为binary_double,或使用转换函数to_binary_float, to_binary_double, to_number
PL/SQL以下面的顺序来匹配数值参数:
PLS_INTEGER、NUMBER、BINARY_FLOAT、BINARY_DOUBLE
一个VARCHAR2的值,可以匹配NUMBER、BINARY_FLOAT和BINARY_DOUBLE
PL/SQL使用每一个匹配提供参数的子程序。例,SORT函数只有一个参数。它有多个重载可以接受NUMBER、BINARY_FLOAT和BINARY_DOUBLE。如果传递了一个PLS_INTEGER,则第一个匹配的重载函数为接受NUMBER参数的SORT函数。
如果PL/SQL试图将一个参数转换为其它类型,它会试图将它转换成更高的数据类型。例,
ATAN2函数接受2个相同类型的参数,如果传递的参数是不同类型,例如一个为PLS_INTEGER,另一个为BINARY_FLOAT,则PL/SQL试图找到一个匹配,它的2个参数都使用高的数据类型。本例中是2个参数均为BINARY_FLOAT的ATAN2函数,因为PLS_INTEGER被转换为更高的类型BINARY__FLOAT。
一个函数接受2个不同类型的参数,一个重载版本接受PLS_INTEGER和BINARY__FLOAT参数;另一个重载版本接收NUMBER和BINARY_DOUBLE参数,如果调用时传递了2个NUMBER参数,则PL/SQL会匹配到(PLS_INTEGER, BINARY_FLOAT)。因为BINARY_FLOAT比BINARY_DOUBLE更匹配NUMBER,而后PL/SQL向下看将NUMBER转换成都PLS_INTEGER
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1132823/ ,如需转载,请注明出处,否则将追究法律责任。