ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Reference-PL/SQL子程序-重载子程序-只是数值数据类型不同的形参

PLSQL Language Reference-PL/SQL子程序-重载子程序-只是数值数据类型不同的形参

原创 Oracle 作者:LuiseDalian 时间:2014-03-30 21:19:50 0 删除 编辑

只是数值数据类型不同的形参

如果形参只是在数值数据类型上不同,也是可以重载的。这个技术用于写数学应用程序的接口,因为多个函数的版本可以使用相同的名称,每个可以接受不同的数值类型。

为了避免给这样的子程序传递参数时造成不必要的麻烦:

n  确保对于每个期待的参数的集合,希望的版本的子程序被调用。例,有重载的子程序可以接受binary_floatbinary_double,如果你传递的是VARCHAR2类型的参数,’0.5’,则会调用哪个函数呢?

n  修饰数字字面量并使用转换函数来明确希望的参数类型。例5.0f表示为binary_float 5.0dbinary_double,或使用转换函数to_binary_float, to_binary_double, to_number

                                                                                                                              

PL/SQL以下面的顺序来匹配数值参数:

PLS_INTEGERNUMBERBINARY_FLOATBINARY_DOUBLE

一个VARCHAR2的值,可以匹配NUMBERBINARY_FLOATBINARY_DOUBLE

PL/SQL使用每一个匹配提供参数的子程序。例,SORT函数只有一个参数。它有多个重载可以接受NUMBERBINARY_FLOATBINARY_DOUBLE。如果传递了一个PLS_INTEGER,则第一个匹配的重载函数为接受NUMBER参数的SORT函数。

 

如果PL/SQL试图将一个参数转换为其它类型,它会试图将它转换成更高的数据类型。例,

ATAN2函数接受2个相同类型的参数,如果传递的参数是不同类型,例如一个为PLS_INTEGER,另一个为BINARY_FLOAT,则PL/SQL试图找到一个匹配,它的2个参数都使用高的数据类型。本例中是2个参数均为BINARY_FLOATATAN2函数,因为PLS_INTEGER被转换为更高的类型BINARY__FLOAT

 

一个函数接受2个不同类型的参数,一个重载版本接受PLS_INTEGERBINARY__FLOAT参数;另一个重载版本接收NUMBERBINARY_DOUBLE参数,如果调用时传递了2NUMBER参数,则PL/SQL会匹配到(PLS_INTEGER, BINARY_FLOAT)。因为BINARY_FLOATBINARY_DOUBLE更匹配NUMBER,而后PL/SQL向下看将NUMBER转换成都PLS_INTEGER

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1132823/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5568763