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

news2024/11/24 11:03:50

场景

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');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1325947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(企业 / 公司项目)代码生成器底层原理:模板框架freemarker

1.按照设置好的模板文件就能生成Java,vue文件,前后端都可生成。 2.也可以进行复杂Excel到处:可以转成xml,用xml来制作模板,在生成excel 3.需要批量生成格式固定的一类文件的需求也可以使用模板框架freemarker 首先引…

大数据时代,如何基于机密虚拟化技术构建数据安全的“基石”

云布道师 2023 年 10 月 31 日-11 月 2 日,2023 云栖大会在中国杭州云栖小镇举行,阿里云弹性计算产品专家唐湘华、阿里云高级安全专家刘煜堃、蚂蚁集团高级技术专家肖俊贤三位嘉宾在【云服务器 & 计算服务】专场中共同带来题为《大数据时代&#xf…

推荐几个好用的开源无代码/低代码开发平台

一、什么是无代码/低代码开发 无代码/低代码开发是一种可视化的应用程序开发方法,使用具有拖放组件和模型驱动逻辑组合的图形界面。无代码/低代码开发试图降低从软件技术平台、产品和服务中提取价值的进入壁垒。低代码开发平台被称为可视化集成开发环境&#xff08…

任意文件下载漏洞的利用思考

0x01 前言 任意文件下载漏洞作为最常见的WEB漏洞之一,在平常的渗透测试中经常遇到,但是很多人却并没有深入去想该如何利用这种漏洞,导致忽略了一些细节的信息。 0x02 传统利用 1) 下载配置文件连数据库 通过任意文件下载漏洞下载网…

美团外卖商超商品销量数据

美团外卖商超商品月销量 字段名 店铺id 店铺名称 商品id 商品名称 商品分类 规格名 原价 现价 月销 规格属性 描述 商品图片 含商家月销量

opencv入门到精通——图像的基本操作

目录 目标 访问和修改像素值 访问图像属性 图像感兴趣区域ROI 拆分和合并图像通道 为图像设置边框(填充) 目标 学会: 访问像素值并修改它们 访问图像属性 设置感兴趣区域(ROI) 分割和合并图像 本节中的几乎所有操作都主要与Numpy相…

生成对抗网络与人工智能的完美融合:创新、艺术与未来

导言 生成对抗网络(GAN)作为一种深度学习框架,以其独特的生成能力引起广泛关注。生成对抗网络(GAN)与人工智能的结合不仅在科学领域引起了巨大的关注,也在艺术、医学等多个领域催生了令人振奋的创新。本文将…

Ring Co-XOR encryption based reversible data hiding for 3D mesh model

期刊:Signal Processing 作者:Lingfeng Qu et al. -- 摘要: 加密域可逆数据隐藏被广泛应用于云存储数字媒体的内容安全、隐私保护和便捷管理。然而,RDH-ED技术在三维网格模型载体中的应用研究仍处于起步阶段。为解决现有针对三…

网络安全:网络安全的技术趋势与发展

1.背景介绍 网络安全是现代信息化时代的重要问题之一,它涉及到计算机网络的安全性、数据的完整性、隐私保护等方面。随着互联网的不断发展,网络安全问题也日益复杂化。本文将从多个方面进行探讨,以帮助读者更好地理解网络安全的技术趋势与发…

经典问题:先更新数据库,还是先更新缓存?

之前分享了缓存使用中的几个问题场景:缓存穿透、缓存击穿和缓存雪崩,这几个问题聚焦的是缓存本身的稳定性,包括缓存集群和缓存的数据,除了这些,缓存应用中,缓存和上下游系统的数据同步也很重要。本文我们来…

数据结构学习 leetcode64最小路径和

动态规划 题目: 建议看这里,有这道题详细的解析。我觉得写的挺好。 这是我在学动态规划的时候,动手做的一道题。 虽然我在学动态规划,但是我之前学了dps,所以我就想先用dps试着做,结果发现不行&#xf…

【ECharts】折线图

文章目录 折线图1折线图2折线图3示例 参考: Echarts官网 Echarts 配置项 折线图1 带X轴、Y轴标记线,其中X轴是’category’ 类目轴,适用于离散的类目数据。 let myChart echarts.init(this.$refs.line_chart2); let yList [400, 500, 6…

kibana-7.15.2 一分钟下载、安装、部署 linux

文章目录 一、下载安装部署 1. 下载2. 解压3. 修改配置 二、kibana 启动 2.1. 创建kibana 用户2.2. 赋予权限2.3. 切换用户2.4. kibana启动2.5. 监控服务2.6. 监控服务2.7. kibana停止2.8. 效果图 三、kibana 启动2 3.1. 浏览器访问3.2. 效果图 一、下载安装部署 https:…

Google Play不会凭空消失,这篇文章带你重新找回丢失的它

你是不是因为不小心从手机上删除了Google Play而难过?或者你是否注意到你的Android设备上缺少Google Play图标?你一定很担心你现在会如何下载应用程序。别担心。在这篇文章中,我们将告诉你如何恢复已删除的谷歌商店。 Google Play可以卸载吗 让我们明确一点:除了一些特殊…

k8s 中部署Jenkins

创建namespace apiVersion: v1 kind: Namespace metadata:name: jenkins创建pv以及pvc kind: PersistentVolume apiVersion: v1 metadata:name: jenkins-pv-volumenamespace: jenkinslabels:type: localapp: jenkins spec:#storageClassName: manualcapacity:storage: 5Giacc…

【前端基础】script引入资源脚本加载失败解决方案(重新加载获取备用资源)

问题描述 现在假设有一个script资源加载失败&#xff0c;代码如下 <!DOCTYPE html> <html> <head><title>script 资源加载失败</title> </head> <body><script src"http:hdh.sdas.asdas/1.js"></script> &l…

智能优化算法应用:基于类电磁机制算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于类电磁机制算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于类电磁机制算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.类电磁机制算法4.实验参数设定5.算法…

Git账户密码http方式的配置

Git账户密码http方式的配置 入门 git在提交时每次都需要输入密码和账号信息&#xff0c;可以将账号和密码进行持久化存储&#xff0c; 当git push的时候输入一次用户名和密码就会被记录&#xff0c; 不需要每次输入&#xff0c;提高效率&#xff0c;进行一下配置&#xff1…

linux网络版计算机

文章目录 前言一、网络版计算机1.序列化与反序列化2.网络版计算机实现3.守护进程4.json格式 前言 一、网络版计算机 1.序列化与反序列化 协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符串” 的方式来发送接收的. 如果我们要传输一些"结构化的数据…

2023 英特尔On技术创新大会直播 | 窥探未来科技的边界

2023 英特尔On技术创新大会直播 | 窥探未来科技的边界 写在最前面观后感其他有趣的专题课程 写在最前面 嘿&#xff0c;你是不是对科技和创新充满好奇&#xff1f;2023 英特尔 On 技术创新大会线上活动邀请你一起探索最前沿的科技世界&#xff01; 这不仅是一场普通的聚会&…