Postgres存储的函数是否具有返回值和输出参数?

Luk*_*der 6 postgresql stored-procedures plpgsql

我知道Oracle和PL/SQL

与我对Oracle PL/SQL的了解相比,我对PostgreSQL的存储过程和plpgsql不是很熟悉.在Oracle中,有两种类型的callables:

  • 流程.它们可以有IN,OUTIN OUT参数,但没有返回值
  • 功能.它们可以有IN,OUTIN OUT 参数,它们必须返回一个值

但我是plpgsql的新手

据我所知,在plpgsql中,所有存储过程都被考虑在内functions.据我所知,这意味着,他们可以(但不必)总是返回一个值.现在我在文档页面上看到,我还可以在函数上声明OUT参数,这在Oracle中是不可能的.但是我没有看到关于OUT参数是否可以与返回值组合的示例或任何明确的陈述.我也无法看到IN OUT参数是否可行.

所以这些是我的问题:

  • plpgsql是否允许IN OUT参数?
  • plpgsql是否允许OUT参数与返回值组合?这是一种常见做法吗?你有这方面的例子吗?

nat*_*e c 14

IN和OUT基本上是旧语法的别名.

旧方式:

create function test(param int) 
returns integer as 
$$ select 1 $$ 
language sql;
Run Code Online (Sandbox Code Playgroud)

当量:

create function test(in param int, out int)
as $$ select 1 $$
langauge sql;
Run Code Online (Sandbox Code Playgroud)

params提供的是类型信息,它基本上为您的返回创建一个匿名类型:

create function test(in param, out int, out int)
as $$ select 1, 2 $$
langauge sql;
Run Code Online (Sandbox Code Playgroud)

现在你可以写:

 select * from test(1);
 column1 | column2 
---------+---------
       1 |       2
Run Code Online (Sandbox Code Playgroud)

如果没有out参数,您将不得不创建一个具有两个整数的类型或表来将数据转换为正确的类型:

create or replace function test(in a int) 
returns record as 
as $$ select 1, 2 $$ 
language sql;
                                ^
select * from test(1);
ERROR:  a column definition list is required 
   for functions returning "record"
Run Code Online (Sandbox Code Playgroud)