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

时间:2015-09-17 15:20:07

标签: oracle stored-procedures plsql toad

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

干杯!

1 个答案:

答案 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,则可以通过引用传递。

  •