参数方式 (PL/SQL)
PL/SQL 过程参数可以处于下列三种可能方式的一种:IN、OUT 或 IN OUT。 PL/SQL 函数参数只能处于 IN 方式。
- 除非显式使用缺省值来初始化 IN 形参,否则该形参将初始化为用于调用该形参的实参。 可以在被调用程序中引用 IN 参数;但是,被调用程序不能将新值指定给 IN 参数。 在控制权返回到调用程序之后,实参始终包含调用前对其设置的值。
- OUT 形参将初始化为用于调用该形参的实参。 被调用程序可以引用此形参以及将新值指定给此形参。 如果被调用程序在未发生异常的情况下终止,那么实参将接收到上次对此形参设置的值。 如果发生已处理的异常,那么实参将接收到对此形参设置的上一个值。 如果发生未处理的异常,那么实参将保持执行调用前对其设置的值。
- 与 IN 参数相似,IN OUT 形参将初始化为用于调用该形参的实参。 与 OUT 参数相似,被调用程序可以对 IN OUT 形参进行修改,如果被调用程序在未发生异常的情况下终止,那么形参的上一个值将被传递到调用程序的实参。 如果发生已处理的异常,那么实参将接收到对此形参设置的上一个值。 如果发生未处理的异常,那么实参将保持执行调用前对其设置的值。
表1 总结了这种行为。
| 方式属性 | IN | IN OUT | OUT |
|---|---|---|---|
| 形参初始化为: | 实参值 | 实参值 | 实参值 |
| 被调用程序可以对形参进行修改吗? | False | 是 | 是 |
| 在被调用程序正常终止之后,实参包含: | 执行调用前的原始实参值 | 形参的上一个值 | 形参的上一个值 |
| 在被调用程序中发生已处理的异常之后,实参包含: | 执行调用前的原始实参值 | 形参的上一个值 | 形参的上一个值 |
| 在被调用程序中发生未处理的异常之后,实参包含: | 执行调用前的原始实参值 | 执行调用前的原始实参值 | 执行调用前的原始实参值 |