【问题标题】: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,可能会通过引用传递。

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2023-03-12
    • 2011-05-05
    • 2011-10-12
    相关资源
    最近更新 更多