我知道Oracle和PL / sql
与我对Oracle PL / sql的了解相比,我对Postgresql的存储过程和plpgsql不是很熟悉.在Oracle中,有两种类型的callables:
>程序.它们可以有IN,OUT和IN OUT参数,但没有返回值
>功能.它们可以有IN,它们必须返回一个值
但我是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"