首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回PostgreSQL中存储过程的值

返回PostgreSQL中存储过程的值
EN

Database Administration用户
提问于 2020-01-16 18:35:49
回答 2查看 53.9K关注 0票数 14

我在PostgreSQL教程上读到这篇文章:

如果要从存储过程返回值,则可以使用输出参数。输出参数的最终值将返回给调用方。

然后,我在DZone中发现了函数和存储过程之间的区别:

存储过程不返回值,但存储函数返回单个值。

有人能帮我解决这个问题吗。

如果我们可以从存储过程返回任何内容,也请让我知道如何从正文中的SELECT语句中返回。

如果我哪里错了,请通知我。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-07-19 22:26:51

您的两个源都是plain错误的

  • 函数基本上总是返回一些内容。void的最小值、单个值、一行或一组行(“设置返回函数”,即a.k.a )。(“表-函数”)--唯一不能返回任何内容的变体,即不返回行。从PL/pgSQL代码中调用,如果不想要结果,就必须主动拒绝它们。请参阅:

  • 如果操作步骤 (Postgres 11或更高版本)具有与INOUT模式(或自Postgres 14中以来的OUT模式)的任何参数,则返回一行。提供了一个例子

考虑一个语句来运行ad/pgSQL代码,而不传递或返回任何内容。

为了解决你的核心问题:

如果我们可以从存储过程返回任何内容,也请让我知道如何从正文中的SELECT语句中返回。

与功能相同的方式。在PL/pgSQL过程中,使用INTO关键字为参数赋值:

代码语言:javascript
运行
复制
CREATE PROCEDURE assign_demo(INOUT _val text DEFAULT null)
  LANGUAGE plpgsql AS
$proc$
BEGIN
   SELECT val FROM tbl WHERE id = 2
   INTO _val;                              -- !!!
END
$proc$;

SQL过程中,最后一个命令返回值确定返回值:

代码语言:javascript
运行
复制
CREATE PROCEDURE lang_sql_demo(INOUT _val text DEFAULT null)
  LANGUAGE sql AS
$proc$
SELECT val FROM tbl WHERE id = 2;
$proc$;

类似于标准SQL过程

代码语言:javascript
运行
复制
CREATE OR REPLACE PROCEDURE lang_std_sql_demo(INOUT _val text DEFAULT null)
  LANGUAGE sql
BEGIN ATOMIC
SELECT val FROM tbl WHERE id = 2;
END;

请参见:

db<>fiddle 这里

相关信息:

票数 12
EN

Database Administration用户

发布于 2020-01-16 19:41:42

在Postgresql版本11中,过程是一个新事物,过程和函数之间有两个很大的区别

一个过程可以发出提交或回滚并继续处理,函数不能发出提交或回滚。

函数创建隐式事务任何发生的异常都会导致回滚,除非存在异常块

过程可以通过INOUT参数返回值参见创建函数如何工作

代码语言:javascript
运行
复制
create procedure increase(inout i integer )
LANGUAGE 'plpgsql'
AS $
begin
    i = i+1;
    return;
end ;
$;

call increase(1);

第二大区别是

代码语言:javascript
运行
复制
select increase () -- fails with an error 
-- must use CALL to use a procedure
call increase (3) ;

除非需要提交或回滚使用函数,否则有更多用于调用和返回值的特性.

票数 10
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/257596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档