Oracle子程序参数模式,,,nocopy
复制代码代码如下所示:
声明
n数=10;
程序(do_something
N1数)
开始
dbms_output.put_line(N1);-打印10
——N1=20;非法赋值。
结束;
开始
do_something(N);
(20)do_something;
结束;
out模式用于返回一个值,并且必须引入一个变量调用,并且变量的初始值不会传递给形式形参,如图所示。
该参数的值只有在子例程返回时(不在表单参数更改中)才被复制,如上面所示。如果在返回前发生异常,则不会更改实参数的值。
复制代码代码如下所示:
声明
n数=10;
程序(do_something
N1出数)是
开始
dbms_output.put_line(在分配:N1 | |);打印>没有
N1 = 20;
dbms_output.put_line(在回归:n版画的| |)-> 10;
结束;
开始
do_something(N);
dbms_output.put_line(后返回:n版画的| |)- 20;
结束;
该模式是用来定义是否nocopy的方式是调用的方式调用。(这只是一个编译器提示,它并不总是工作)。默认情况下,out模式的参数以传递值的方式调用。
在主要用于传入参数,虽然N2 = 20被调用,但它没有生效,直到它返回。如图所示。
nocopy是一个引用,它将立即生效,当分配,如图所示,如果异常发生在返回的实际参数的值也会发生变化。
因为在返回子例程时,out参数将返回值复制到实际参数,调用之后n的值为20,如图所示。
复制代码代码如下所示:
声明
n数=10;
程序(do_something
N1数,
n2数,
N3在nocopy数)是
开始
n2 = 20;
dbms_output.put_line(N1);-打印10 >
N3:= 30;
dbms_output.put_line(N1);-打印30 >
结束;
开始
do_something(N,N,N);
dbms_output.put_line(N);-打印20 >
结束;