加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:13:26 所属栏目:百科 来源:网络整理
导读:我知道Oracle和PL / SQL 与我对Oracle PL / SQL的了解相比,我对PostgreSQL的存储过程和plpgsql不是很熟悉.在Oracle中,有两种类型的callables: 程序.它们可以有IN,OUT和IN OUT参数,但没有返回值 功能.它们可以有IN,它们必须返回一个值 但我是plpgsql的新手
我知道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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读