16、Oracle 教程 PL/SQL 基础 - 局部块和重载

局部块:在声明部分定义一个PROCEDURE或者FUNCTION,这个定义的块只能在当前块中使用;定义和使用的方法和之前没有却别,完全一样;

重载:同属于一个作用范围的多个程序使用的都是一个名字,那么这些名字就是重载的;(也就是说PROCEDURE和FUNCTION可以发生重载,只要他们的名字一样)。重载后,在调用的时候,会根据实际的参数列表和不同的重载模块的参数列表比较,寻找一个可以互相匹配的模块。

重载限制

重载程序的参数中至少有一个是来自于不同的数据类型“家族”:比如INTEGER REAL、DECIMAL、FLOAT都是NUMBER的子类型,他们是同一个家族的;

如果重载函数只是参数列表中的参数名字不同,调用时就必须使用命名表示法;

不能仅靠参数列表中参数的模式来区别重载程序;

所有重载程序必须在相同的PL/SQL作用范围内或者同一个块(匿名块、独立的过程或者函数、包)中定义;

重载函数不能仅靠返回值的数据类型区分;

前置声明:先提前声明一个模块,然后再给出这个模块的定义;

如果A调用了B,B有调用了A,这种情况就无法在使用模块之前定义所有的模块,这个时候就要用到前置声明。

前置声明只是由程序头部以及一个跟在后面的(;)组成:例如:FUNCTION test() return number;

  • 不能对变量或者游标进行前置声明,这个技术只对模块有效(包括过程和函数);
  • 使用前置声明的程序的定义,必须位于前置声明所在的PL/SQL代码块(匿名块、过程、函数或者包体)的声明部分;