【问题标题】:Difference between IN, OUT, IN OUT parameters in PLSQLPLSQL中IN、OUT、IN OUT参数的区别
【发布时间】:2012-07-24 03:18:53
【问题描述】:

请告诉我 PL/SQL 中的 IN、OUT、IN OUT 参数有什么区别。以及如何使用 PL/SQL 过程返回多个值。

【问题讨论】:

标签: oracle plsql


【解决方案1】:

什么是IN/OUT/INOUT参数?

这些是您定义为函数参数列表的一部分的参数,它们作为结果的一部分返回。创建函数时,未显式指定的参数默认为 IN 参数(这意味着它们被传入而不返回),这就是为什么您有时会在使用函数向导时看到 PgAdmin 执行类似于 IN somevariable variabletype 的操作。

您也可以有 INOUT 参数,它们是函数输入,既可以传入,也可以由函数修改,也可以返回。

SQL OUTPUT 参数 - 返回多条记录

--SQL returning multiple records
CREATE OR REPLACE FUNCTION fn_sqltestmulti(param_subject varchar, 
  OUT test_id integer, OUT test_stuff text) RETURNS SETOF record
AS $$
  SELECT test_id, test_stuff 
    FROM testtable where test_stuff LIKE $1;
$$
LANGUAGE 'sql' VOLATILE;

--example
SELECT * FROM fn_sqltestmulti('%stuff%');

 --OUTPUT--
 test_id |     test_stuff
---------+--------------------
       1 | this is more stuff
       2 | this is new stuff

MORE EXAMPLES

【讨论】:

  • 我不确定 Postgres 社区如何使用该术语,但 SO 上的标签暗示“plsql”仅适用于 Oracle,而“plpgsql”适用于 Postgres。
  • 即使使用 PostgreSQL,也会在 SELECT * FROM fn_sqltestmulti() 处显示错误... 使用 SELECT * FROM fn_sqltestmulti() AS x(test_id integer, test_stuff text) 之类的内容进行更正,请参阅 thisthis 问题。
  • 给其他读者的说明:问题是关于 Oracle plsql,但答案是关于 Postgres plpgsql。它们是相似但不同的语言。对于 Oracle,请参阅精美手册:Subprogram parameters。手册解释了形式参数和实际参数、参数传递方法和模式、别名、默认值和位置、命名和混合表示法等相关概念。
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 2014-08-13
  • 2015-12-14
  • 2020-12-20
  • 2011-10-12
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多