Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用

2023-12-21

场景

Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句:

Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句-CSDN博客

上面讲了基本语法,下面记录游标、自定义函数、存储过程的使用。

注:

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、PL/pgSQL游标

PL/pgSQL 游标允许我们封装一个查询,然后每次处理结果集中的一条记录。游标可以将大结果集拆分成许多小的记录,

避免内存溢出;另外,我们可以定义一个返回游标引用的函数,然后调用程序可以基于这个引用处理返回的结果集。

使用游标的步骤:

1. 声明游标变量;

2. 打开游标;

3. 从游标中获取结果;

4. 判断是否存在更多结果。如果存在,执行第 3 步;否则,执行第 5 步;

5. 关闭游标。

示例代码:

DO $$
DECLARE
 rec_user RECORD;
 cur_user CURSOR(user_name VARCHAR) FOR
 SELECT id, name
 FROM b_user
 WHERE name = user_name;
BEGIN
 -- 打开游标
 OPEN cur_user('222');
 
 LOOP
 -- 获取游标中的记录
 FETCH cur_user INTO rec_user;
 -- 没有找到更多数据时退出循环
 EXIT WHEN NOT FOUND;
 RAISE NOTICE '%,% ' , rec_user.id, rec_user.name;
 END LOOP;
 
 -- Close the cursor
 CLOSE cur_user;
END $$;

示例代码运行结果

首先,声明了一个游标 cur_user,并且绑定了一个查询语句,通过一个参数user_name 获取指定姓名的用户;

然后使用 OPEN 打开游标;接着在循环中使用 FETCH 语句获取游标中的记录,如果没有找到更多数据退出循环语句;

变量 rec_user 用于存储游标中的记录;最后使用 CLOSE语句关闭游标,释放资源。

2、创建自定义PL/pgSQL函数

要创建一个自定义的 PL/pgSQL 函数,可以使用 CREATE FUNCTION 语句。

CREATE 表示创建函数,OR REPLACE 表示替换函数定义;

name 是函数名;括号内是参数,多个参数使用逗号分隔;argmode 可以是 IN(输入)、OUT(输出)、INOUT(输入输出)

或者 VARIADIC(数量可变),默认为 IN;argname 是参数名称;argtype 是参数的类型;default_expr是参数的默认值;

rettype 是返回数据的类型;AS 后面是函数的定义,和上文中的匿名块相同;最后,LANGUAGE 指定函数实现的语言。

创建一个示例函数,用于返回指定姓名的用户数量

CREATE
 OR REPLACE FUNCTION get_user_count (user_name VARCHAR ) RETURNS INTEGER AS $$ DECLARE
 ln_count INTEGER;
BEGIN
 SELECT COUNT
  (*) INTO ln_count
 FROM
  b_user
 WHERE
  name = user_name;
 RETURN ln_count;
 
END; $$ LANGUAGE plpgsql;

函数调用方式

SELECT name,get_user_count(name)
FROM b_user ;

调用结果

3、创建存储过程

存储过程,使用 CREATE PROCEDURE 语句创建

存储过程的定义和函数主要的区别在于没有返回值,其他内容都类似。以下示例创建了一个存储过程用于修改用户的信息

CREATE
 OR REPLACE PROCEDURE update_user (user_id in integer,user_name IN VARCHAR) AS $$ BEGIN
  UPDATE b_user
  SET name = user_name
 WHERE
  id = user_id;
 
END; $$ LANGUAGE plpgsql;

存储过程调用方法:

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

Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用 的相关文章

随机推荐

  • 独立搭建UI自动化测试框架分享

    今天给大家分享一个selenium testng maven ant的UI自动化 可以用于功能测试 也可按复杂的业务流程编写测试用例 今天此篇文章不过多讲解如何实现CI CD 只讲解自己能独立搭建UI框架 如果有其他好的框架也可以联系我 分
  • WinFax.dll文件缺少导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个WinFax
  • 接口测试测什么?一个简单问题把我难住了

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 题解 | #返回购买价格为 10 美元或以上产品的顾客列表#

    脚气怎样治能够根除 2022腾讯秋招面经导航汇总 测试篇 华为上海青浦研究所现状 华为上海青浦研究所现状 华为上海青浦研究所现状 TP普联嵌入式一面 HC还有一千多个 招不到就浪费了 求求大家投下小米吧 吃透计算机网络八股文 年薪40万 实
  • 【2024全网最火最全性能教程】一文搞懂性能测试!

    性能测试概念 我们经常看到的性能测试概念 有人或称之为性能策略 或称之为性能方法 或称之为性能场景分类 大概可以看到性能测试 负载测试 压力测试 强度测试等一堆专有名词的解释 针对这些概念 我不知道你看到的时候会不会像我的感觉一样 乱 一个
  • 【pytest】执行环境切换的两种解决方案

    一 痛点分析 在实际企业的项目中 自动化测试的代码往往需要在不同的环境中进行切换 比如多套测试环境 预上线环境 UAT环境 线上环境等等 并且在DevOps理念中 往往自动化都会与Jenkins进行CI CD 不论是定时执行策略还是迭代测试
  • 什么是“人机协同”机器学习?

    人机协同 HITL 是人工智能的一个分支 它同时利用人类智能和机器智能来创建机器学习模型 在传统的 人机协同 方法中 人们会参与一个良性循环 在其中训练 调整和测试特定算法 通常 它的工作方式如下 首先 对数据进行人工标注 这就为模型提供了
  • 计算机msvcr120.dll文件丢失怎样修复,只需简单3步即可

    在使用电脑过程中 我们经常会遇到一些错误提示 其中最常见的就是 缺少某个 dll文件 找不到msvcr120 dll文件 那么 msvcr120 dll文件到底是什么呢 当我们遇到这个问题时应该如何解决呢 本文将详细介绍msvcr120 d
  • 用RPA轻松实现智联卓聘招人,提升招聘效率!

    RPA Robotic Process Automation 是一种通过软件机器人模拟和自动执行人类操作的技术 它可以用来处理大量重复性的任务 提高工作效率 减少人力资源的浪费 在智联卓聘招人这个行业场景中 企业需要通过招聘渠道收集大量的简
  • winipsec.dll文件缺少导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个winipse
  • 性能测试怎么入门?一文7个知识点带你成功入门!

    一 相关概念 1 性能测试相关 负载测试 性能测试 压力测试 稳定性测试 全链路测试等 2 性能指标 吞吐率 tps 并发用户数 吞吐量 响应时间等 二 性能测试 1 概念解析 通过工具 找出或者获得系统在不同工况下的性能指标值 主要使用性
  • WINSRPC.DLL文件缺少导致无法启动问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个WINSRPC
  • 计算机SSM毕设选题 垃圾分类管理系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 2 1 系统开发流程
  • winsrv.dll文件缺少导致程序无法启动问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个winsrv
  • 小程序模版|家政服务小程序源码

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 测试开发 | 智能农业引领农业革新,人工智能携手农业改写未来

    互联网40的包值得去吗 回暖分析 战绩结算 on 赛文X 软件技术就业单位分析 山东大厂浪潮集团 国家电网研究院VS杭州华为 华为跟银行怎么选 别焦虑 计算机的同学就业率也很低 华为 薪资爆料 字节电商运营实习面经分享 京东 Java OC
  • <img src=“x“ onerror=“alert(1)“>

    华为上海青浦研究所现状 华为上海青浦研究所现状 华孝子的胜利 xdm西安交行软开和电信西分怎么选 系表情包 一 旷视科技 一面 求问各位嵌入式Linux有什么好的项目 备战春招了 计软转嵌入式经验分享 嵌入式项目 华为上海青浦研究所现状 字
  • ERP和MES之间的联系是什么?

    ERP和MES之间有什么联系 ERP系统像是企业的 大脑 它管理着所有的资源 数据和流程 让企业的各个部门有条不紊地运转 相较之下 MES系统更像是企业的 双手 直接参与到生产过程中 确保生产线上的一切都在按计划进行 这两者虽然关注点不同
  • Different WiFi cards -QCN9274

    华为上海青浦研究所现状 华为上海青浦 值得一去的杭州外企篇 发展稳定 专业不限 双非可入 offer选择 华为上海青浦研究所现状 华为上海青浦研究所现状 华为上海青浦研究所现状 2024届大龄硕士长沙软开求职进展 尾声 牛马 帮选offer
  • Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用

    场景 Postgresql中PL pgSQL代码块的语法与使用 声明与赋值 IF语句 CASE语句 循环语句 Postgresql中PL pgSQL代码块的语法与使用 声明与赋值 IF语句 CASE语句 循环语句 CSDN博客 上面讲了基本