PL/SQL中的IN,OUT,IN OUT参数到底是什么

Jul*_*es 1 oracle toad plsql stored-procedures

我在这里查询了一些问题以及在线观看和观看视频,但我仍然感到困惑的是IN,OUT.我问的原因是因为我正在编写一个程序,根据其他程序中的IN参数记录错误,

干杯!

sst*_*tan 8

这里的Oracle文档很好地解释了:

参数的模式指示参数是将数据传递给过程(IN),从过程(OUT)返回数据,还是可以同时执行两者(IN OUT).

关于OUT参数具体:

...您无法使用它将值传递给过程.即使在为其分配了值之后,也无法在过程中读取其值.

编辑

实际上,虽然上面提供的信息是有效的,但我链接到一个糟糕的资源(Ada Programmer's Guide的SQL*模块).

可以在此处找到更好,更完整的资源以更好地理解3种模式:表8-1 PL/SQL子程序参数模式.

IN模式:

  • 默认模式

  • 将值传递给子程序.

  • 形式参数的作用类似于常量:当子程序开始时,其值是其实际参数或默认值的值,子程序不能更改此值.

  • 实际参数可以是常量,初始化变量,文字或表达式.

  • 实际参数通过引用传递.

OUT 模式:

  • 必须指定.

  • 返回调用者的值.

  • 正式参数初始化为其类型的默认值.该类型的默认值是NULL具有非NULL默认值的记录类型除外.

  • 当子程序开始时,无论其实际参数的值如何,形式参数都具有其初始值.Oracle建议子程序为formal参数赋值.

  • 如果形式参数类型的默认值为NULL,则实际参数必须是其数据类型未定义为的变量NOT NULL.

  • 默认情况下,实际参数按值传递; 如果您指定NOCOPY,则可以通过引用传递.

IN OUT 模式:

  • 必须指定.

  • 将初始值传递给子程序并将更新的值返回给调用者.

  • 形式参数的作用类似于初始化变量:当子程序开始时,其值是其实际参数的值.Oracle建议子程序更新其值.

  • 实际参数必须是变量(通常,它是字符串缓冲区或数字累加器).

  • 默认情况下,实际参数按值传递(在两个方向上); 如果您指定NOCOPY,则可以通过引用传递.