15、Oracle 教程 PL/SQL 基础 - 参数

参数模式:

模式

说明

参数用途

IN

只读的

在模块内部可以使用实参的值,但是不能修改参数,这也是默认模式;

OUT

只写的

模块内部可以给参数赋值,但是参数值不能被使用;

IN OUT

可读写

模块即可以使用(读)也可以修改(写)参数的值;

IN参数类似一个常量;

OUT参数在程序成功之前是没有任何值的(除非使用了NOCOPY提示):

  • 不能把一个OUT参数赋值给另一个变量,甚至不能赋值给它自己;
  • 不能给OUT参数提供缺省值,只能在模块内部给OUT参数赋值;
  • 如果程序执行发生了异常,任何对于OUT参数的赋值操作都会回滚;

INOUT参数:

  • 一个IN OUT模式的参数不能有缺省值;
  • 一个IN OUT模式的实参必须是一个变量,不能是一个常量、直接量或者表达式,一名为这些格式无法提供一个可以让PL/SQL存放传出数据的容器;

参数是不受约束的,也就是说在定义一个变量类型为varchar2时,要把大小写上,但是在参数中不需要写大小;

形参和实参匹配有两种方法:

  • 位置表示法:实参的位置和形参对应(和java一样);
  • 命名表示法:位置不对应,显示说明,例如:函数test(param1 varchar, param2 varchar),要将v1(对应param1)和v2(对应param2)传进去可以:test(v2=>param2, v1=>param1)

缺省值:可以给一个IN模式的参数提供缺省值。如果IN模式的参数有缺省值,在调用程序时就不必包含这个参数了。同样,如果调用程序时参数列表中没有包括这个参数,就会使用这个参数的缺省值。当然,必须给每个IN OUT参数都提供一个实参。

有两种方式提供缺省值:defualt和:=;例如:

PROCEDURE test(sing_in varchar2 := 'tttt', born_in DATE DEFAULT SYSDATE)

说明:像上面这个例子,如果想跳过第一个参数,只指定第二个参数,这个时候命名表示法就有排上用场了。