我在这里查询了一些问题以及在线观看和观看视频,但我仍然感到困惑的是IN,OUT。我问的原因是因为我正在编写一个程序,根据其他程序中的IN参数记录错误,
干杯!
答案 0 :(得分:7)
Oracle文档here很好地解释了:
参数的模式指示参数是将数据传递给过程(
IN
),从过程(OUT
)返回数据,还是可以同时执行两者(IN OUT
)。
具体关于OUT
个参数:
...您无法使用它将值传递给过程。即使已经为其分配了值,也无法在过程中读取其值。
修改强>
实际上,虽然上面提供的信息是有效的,但我链接的资源很差(Ada Programmer& C ++指南的SQL *模块)。
可以在此处找到更好,更完整的资源,以便更好地理解3种模式:Table 8-1 PL/SQL Subprogram Parameter Modes。
IN
模式:
默认模式
将值传递给子程序。
正式参数的作用类似于常量:当子程序开始时,其值是其实际参数或默认值的值,子程序不能更改此值。
实际参数可以是常量,初始化变量,文字或表达式。
实际参数通过引用传递。
OUT
模式:
必须指定。
返回调用者的值。
正式参数初始化为其类型的默认值。除了具有非
NULL
默认值的记录类型外,该类型的默认值为NULL
。子程序开始时,形式参数的初始值与其实际参数的值无关。 Oracle建议子程序为形式参数赋值。
如果形式参数类型的默认值为
NULL
,则实际参数必须是其数据类型未定义为NOT NULL
的变量。默认情况下,实际参数按值传递;如果您指定
NOCOPY
,则可以通过引用传递。
IN OUT
模式:
必须指定。
将初始值传递给子程序并将更新后的值返回给调用者。
正式参数的作用类似于初始化变量:当子程序开始时,其值是其实际参数的值。 Oracle建议子程序更新其值。
实际参数必须是变量(通常是字符串缓冲区或数字累加器)。
默认情况下,实际参数按值传递(在两个方向上);如果您指定
NOCOPY
,则可以通过引用传递。