正如前面所讨论的,一个参数的模式可以是IN、OUT或者IN OUT这三种模式中的其中一种。

下面这些形式参数的特性取决于它的模式。
  • 当调用存储过程或函数时如何对形参进行初始化。
  • 被调用的存储过程或函数是否可以修改形式参数。
  • 实际参数如何从调用程序中将值传递到被调用程序中。
  • 当被调用的程序出现一个未处理的异常时如何处理形式参数。

在下面的表中根据参数的模式汇总了各个参数的行为。

Mode Property IN IN OUT OUT
Formal parameter initialized to: Actual parameter value Actual parameter value Actual parameter value
Formal parameter modifiable by the called program? No Yes Yes
Actual parameter contains: (after normal called program termination) Original actual parameter value prior to the call Last value of the formal parameter Last value of the formal parameter
Actual parameter contains: (after a handled exception in the called program) Original actual parameter value prior to the call Last value of the formal parameter Last value of the formal parameter
Actual parameter contains: (after an unhandled exception in the called program) Original actual parameter value prior to the call Original actual parameter value prior to the call Original actual parameter value prior to the call

正如上面的表所示, 一个IN形式参数只有在调用的时候才被初始化为实际参数,除非它被明确使用缺省值初始化,IN参数可以在被调用的程序中引用,被调用的程序也可以不分配新的值给输入参数。当被调用的应用运行结束,返回到调用程序时,实际参数包含着和应用被调用前相同的值。

OUT形式参数只有在调用时才被初始化为实际参数。被调用的程序可以引用并且分配一个新的值给形式参数。如果被调用的程序正常结束, 没有产生异常。那么实际参数的值就是在最后一次分配给形式参数的值。如果遇到一个被处理的异常,实际参数的值就是最近一次分配给形式参数的值。 如果一个无法被处理的异常产生,实际参数的值仍然是在调用前被分配的值。

和IN参数一样,一个IN OUT形式参数在被调用的时候初始化为实际参数。和一个OUT参数一样,一个IN OUT形参数可以由被调用的程序修改,并且如果被调用的应用正常结束,没有异常,先前被设定形式参数的值会被传递到调用程序的实际参数中。如果遇到一个可处理的异常,实际参数的值是上一次分配给形式参数的值。如果一个无法处理的异常产生,实际参数的值仍然是在调用前被分配的值。