Luk*_*der 6 postgresql stored-procedures plpgsql
与我对Oracle PL/SQL的了解相比,我对PostgreSQL的存储过程和plpgsql不是很熟悉.在Oracle中,有两种类型的callables:
据我所知,在plpgsql中,所有存储过程都被考虑在内functions.据我所知,这意味着,他们可以(但不必)总是返回一个值.现在我在文档页面上看到,我还可以在函数上声明OUT参数,这在Oracle中是不可能的.但是我没有看到关于OUT参数是否可以与返回值组合的示例或任何明确的陈述.我也无法看到IN 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)