gpt4 book ai didi

postgresql - Postgres 存储函数可以同时具有返回值和输出参数吗?

转载 作者:行者123 更新时间:2023-11-29 11:23:03 26 4
gpt4 key购买 nike

我了解 Oracle 和 PL/SQL

相对于我对Oracle PL/SQL的了解,我对PostgreSQL的存储过程和plpgsql不是很熟悉。在 Oracle 中,有两种类型的可调用对象:

  • 程序。它们可以有INOUTIN OUT 参数,但没有返回值
  • 职能。它们可以有INOUTIN OUT 参数并且它们必须返回一个值

但我是 plpgsql 的新手

据我了解,在 plpgsql 中,所有存储过程都被视为函数。据我了解,这意味着它们可以(但不必)始终返回一个值。现在我在 documentation page 上看到,我还可以在函数上声明 OUT 参数,这在 Oracle 中是不可能的。但是我没有看到关于 OUT 参数是否可以与返回值组合的示例或任何明确的声明。我也看不到 IN OUT 参数是否可行。

所以这些是我的问题:

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

最佳答案

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

老方法:

create function test(param int) 
returns integer as
$$ select 1 $$
language sql;

等效:

create function test(in param int, out int)
as $$ select 1 $$
langauge sql;

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

create function test(in param, out int, out int)
as $$ select 1, 2 $$
langauge sql;

现在你可以写:

 select * from test(1);
column1 | column2
---------+---------
1 | 2

如果没有 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"

关于postgresql - Postgres 存储函数可以同时具有返回值和输出参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com