【问题标题】:What exactly are IN, OUT, IN OUT parameters in PL/SQLPL/SQL 中的 IN、OUT、IN OUT 参数到底是什么
【发布时间】:2015-12-14 13:07:15
【问题描述】:
我在这里查找了问题,也查看了在线和观看视频,但我仍然对 IN、OUT 到底是什么感到困惑。我问的原因是因为我正在编写一个程序,该程序将根据其他程序中的 IN 参数记录错误,
干杯!
【问题讨论】:
-
@dwjv 不幸的是,这个问题没有正确回答。由于某些奇怪的原因,该问题的唯一答案是关于 plpgsql 使问题无用。
标签:
oracle
stored-procedures
plsql
toad
【解决方案1】:
Oracle 文档here 做了很好的解释:
参数的模式表示参数是否将数据传递给过程(IN),从过程返回数据(OUT),或者两者都可以(IN OUT)。
关于OUT具体参数:
...您不能使用它向过程传递值。你也不能在过程中读取它的值,即使它已经被赋值了。
编辑
实际上,虽然上面提供的信息是有效的,但我链接到了一个糟糕的资源(SQL*Module for Ada Programmer's Guide)。
可以在此处找到更好、更完整的资源来更好地理解这 3 种模式:Table 8-1 PL/SQL Subprogram Parameter Modes。
IN模式:
OUT模式:
-
必须指定。
-
向调用者返回一个值。
-
形参被初始化为其类型的默认值。该类型的默认值为NULL,但记录类型的默认值为非NULL。
-
当子程序开始时,形参有它的初始值,而不管它的实参值是多少。 Oracle 建议子程序为形参赋值。
-
如果形参类型的默认值为NULL,那么实参必须是数据类型未定义为NOT NULL的变量。
-
默认情况下,实参是传值的;如果你指定NOCOPY,它可能会被引用传递。
IN OUT模式:
-
必须指定。
-
将初始值传递给子程序并将更新后的值返回给调用者。
-
形参就像一个初始化变量:当子程序开始时,它的值就是它的实参。 Oracle 建议子程序更新其值。
-
实参必须是变量(通常是字符串缓冲区或数值累加器)。
-
默认情况下,实参按值传递(双向);如果指定NOCOPY,可能会通过引用传递。