Postgres 函数结束循环并返回错误

2023-12-07

我尝试创建这个函数,但系统返回“循环错误”,并且我不知道如何同时返回 3 个变量。我很努力地想弄清楚这个问题,但我没有在任何地方找到答案。

CREATE OR REPLACE FUNCTION conta_relatos(fator_normativo integer, fator_determinativo integer)
  RETURNS integer AS
$BODY$
DECLARE
    vinculos_encontrados RECORD;
    rel_pri INT;
rel_sec INT;
rel_ref INT;
no_item INT;
tipo_relato TEXT;
BEGIN
    rel_pri := 0;
    rel_sec := 0;
    rel_ref := 0;    
FOR vinculos_encontrados IN SELECT * FROM "Vinculos" WHERE ("Vinculos"."Fator_Normativo" =   Fator_Normativo AND "Vinculos"."Fator_Determinativo" = Fator_Determinativo) LOOP
    no_item := vinculos_encontrados."Item";
SELECT "Fontes"."Tipo_Relato" INTO tipo_relato FROM "Fontes" WHERE "Fontes"."ID" = no_item;
--IF tipo_relato = "1 - Relato Primário" THEN 
   rel_pri := rel_pri + 1;
--ELSE IF tipo_relato = "2 - Relato Secundário" THEN 
   rel_sec := rel_sec + 1;
--ELSE IF tipo_relato = "3 - Relato Referencial" THEN 
   rel_ref := rel_ref + 1;
    --END IF;
    END LOOP;
    RETURN rel_pri, rel_sec, rel_ref;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

Use OUT参数返回具有多列的单行。这RETURN在这种情况下,类型是可选的,我引用手册here:

当有OUT or INOUT参数,RETURNS子句可以省略。

CREATE OR REPLACE FUNCTION conta_relatos(
    _fator_normativo integer
   ,_fator_determinativo integer
   ,OUT rel_pri integer
   ,OUT rel_sec integer
   ,OUT rel_ref integer
   ) AS
$func$
DECLARE
   tipo_relato text;
BEGIN

rel_pri := 0;
rel_sec := 0;
rel_ref := 0;

FOR tipo_relato IN
   SELECT f."Tipo_Relato"
   FROM   "Vinculos" v
   JOIN   "Fontes"   f ON f."ID" = v."Item"
   WHERE  v."Fator_Normativo" = _fator_normativo
   AND    v."Fator_Determinativo" = _fator_determinativo
LOOP
   CASE tipo_relato
   WHEN '1 - Relato Primário' THEN 
      rel_pri := rel_pri + 1;
   WHEN '2 - Relato Secundário' THEN 
      rel_sec := rel_sec + 1;
   WHEN '3 - Relato Referencial' THEN 
      rel_ref := rel_ref + 1;
   END CASE;
END LOOP;

-- No RETURN needed, OUT parameters are returned automatically.

END
$func$ LANGUAGE plpgsql;

Call:

SELECT * FROM conta_relatos(1,2);

我还大大简化了你的功能。其中:

  • Use 《简单案例》为了你的作业。
  • 通过联接将两个查询简化为一个查询。

整个函数可以轻松地重写为单个 SQL 语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres 函数结束循环并返回错误 的相关文章

随机推荐

  • PostgreSQL Last_value 忽略空值

    我知道已经有人问过这个问题 但为什么下面的解决方案不起作用 我要填value最后一个非空值的排序方式为idx 我所看到的 idx coalesce 1 2 2 4 3 4 5 10 5 rows 我想要的是 idx coalesce 1 2
  • 使用 shell_exec('passwd') 更改用户密码

    我需要能够通过网页 在受控环境中 更改用户的密码 因此 为此 我使用以下代码 我的问题是该脚本没有更改用户 testUser 的密码 我究竟做错了什么 Thanks 另一种选择是使用一个 shell 脚本 比如名为 passwd chang
  • 在 C# 中使用 newtonsoft 查找并返回 JSON 差异?

    我想获得使用 Newtonsoft 进行比较时不匹配的 JSON 部分的列表 我有这个比较代码 JObject xpctJSON JObject Parse expectedJSON JObject actJSON JObject Pars
  • 编译静态版QT + OpenSSL 支持

    我从这里下载了 qt everywhere opensource src 5 8 0 的源文件 https download qt io snapshots qt 5 8 5 8 0 latest src 我想编译它并支持静态版本的 QT
  • 自动重命名视频文件

    我有很多文件想要重命名 手动重命名需要很长时间 它们是视频文件 通常采用以下格式 节目名称 剧集编号 剧集名称 例如 绝命毒师 101 Pilot 我想做的是将 101 部分更改为我自己的约定 S01E01 我认为在一系列节目中 该字符串的
  • 无法在 Windows 中安装 Pylint - python?

    我是Python新手 我在Windows上安装了Python 位于以下目录中C Program Files Python36 我在用vscode当我尝试在 IDE 中运行以下命令时integrated terminal C Program
  • 使用 HTML 和 CSS 在第一个打印页面上显示不同的页眉

    是否可以使用 HTML 和 或 CSS 的任意组合在第一个标题上显示一个标题printed页面然后显示不同的每个后续的标题printed页 我知道关于 media printCSS 标记仅在打印站点时显示某些内容 但这并不能让我在多个页面上
  • 使用 javascript 移动元素

    使用 JavaScript 移动元素的最佳实践是什么 您使用超时或间隔吗 事件定时为 10 毫秒是不好还是会更精确 您是逐像素移动还是总距离的某一部分移动 如果使用间隔 当元素就位时如何停止间隔 我最近两次在 javascript 中看到运
  • Chris Banes 实施 ActionBar-PulltoRefresh、库错误等

    继我之前关于在我的项目中从 github 导入某个库的问题之后 我决定实现一个不同的库 但此时我遇到了很多错误 导入Android Listview通过pull刷新 项目属性错误 与 Google 目前使用 Chris Banes 的 Ac
  • 通过jQuery更改img src:图像不会刷新

    我正在尝试通过 Phonegap Build 应用程序中的 jquery 动态更改 src 如下所示 photo profile attr src fullPath one load function evt console log loa
  • 在带有 extrafont 包的 .eps 图中使用 Arial 时出错

    我在 R 中使用 ggplot2 为出版物生成图形 其中所有图形都需要为 eps 格式 所有字体都需要为 Arial 我一直在关注本指南使用 extrafont 包来做到这一点 据我了解 该行loadfonts device postscr
  • 使用 java 访问嵌套 JSON 对象值

    files f1 png intext A inval 0 inbinary false f2 png intext A inval 0 inbinary true 当f1 png值不固定时如何访问inval的值 即文件名可以是任何名称 它
  • 从 Windows 服务启用/禁用 Aero

    我有一些代码可以在 Vista 中启用 禁用 Windows Aero 服务 并且我想在 Windows 服务中运行它 该代码在独立应用程序中运行 但是当我从服务运行它时 什么也没有发生 不会引发任何错误或异常 我意识到在服务中运行代码与在
  • 使用 ScalaTest 时出现 java.lang.NoSuchFieldError

    我在使用 ScalaTest 时遇到了一个很难调试的错误 奇怪的是 当我的程序没有 Main 对象时 似乎会发生这种情况 但当它有 Main 对象时 却不会发生这种情况 我的代码实际上只是使用带有多态方法的类型类从列表中获取切片 看起来像这
  • 一个用户数据库为多个应用程序数据库提供服务

    我正在管理一个相当大的数据库 该数据库的复杂性和设计都从单个应用程序数据库开始增长 现在计划添加第五个应用程序 该应用程序带有自己的模式和特定数据 我一直在研究 SSO 解决方案 但这并不是我真正想要的 我的目标是拥有一个客户注册 登录和授
  • 使用 Coldfusion SpreadsheetWrite 和 cfscript 创建多个工作表

    我想使用 CF9 SpreadsheetWrite 和 cfscript 创建一个包含两张表的 Excel 文件 就像是 var data spreadsheetNew data var key spreadsheetNew key spr
  • 比较 XML 时如何忽略某些元素?

    我有一条 XML 消息 如下所示
  • MYSQL 未启动(InnoDB:插件初始化因错误通用错误而中止)

    我重新启动了服务器 因为它冻结了 可能是迄今为止我做过的最愚蠢的事情 然后出现了一些内部服务器错误 我很快发现mysql启动失败 service mysql status 我读了mysql错误日志 Pastebin 并开始谷歌搜索 我正在运
  • 标准布局和尾部填充

    David Hollman 最近在推特上发布了以下示例 我对其进行了稍微简化 struct FooBeforeBase double d bool b 4 struct FooBefore FooBeforeBase float value
  • Postgres 函数结束循环并返回错误

    我尝试创建这个函数 但系统返回 循环错误 并且我不知道如何同时返回 3 个变量 我很努力地想弄清楚这个问题 但我没有在任何地方找到答案 CREATE OR REPLACE FUNCTION conta relatos fator norma