pg11函数存储过程调用示例

PostgreSQL如何自定义函数并且调用 ');执行结果:Hello, world!!BEGIN raise notice '% 除以 %' , js1 , js2;IF js2 = 0 THEN raise EXCEPTION '不能除0';END IF;EXCEPTION -- 捕获异常 WHEN OTHERS THEN RETURN 0;END;-- 0。 阅读详情

pg11函数存储过程调用总结

测试数据:

create table test(id int,name varchar,age int);
insert into test values(1,'hh',30);

函数调用方式:

对于函数调用返回值为refcursor类型的调用方式,一行作为一个语句执行

begin;
select * from function(); --调用函数名
fetch  all  in "<游标编码号>";  --根据select * from function()查询结果得出游标编码号,再通过fetch显示结果集
end;

存储过程调用方式:

DO $$
DECLARE proc_param int := 5; --参数
BEGIN
  CALL proc_name(proc_param);--调用
END
$$;

一、函数

函数无OUT参数,返回值跟returns 类型保持一致;

如果函数带OUT参数返回,分两种情况:只有一个OUT参数,函数返回值类型与OUT参数保持一致;有多个OUT参数,返回值类型为RECORD类型;此时returns data_type可有可无,存在时,类型则与要求的保持一致。

函数定义:返回RECORD类型:

create or replace function test_fun(v1 int, v2 out varchar,v3 out int) as $$  --默认返回值为record类型
declare 
p1 test;
p2 test[];
p3 refcursor;
v_name varchar;
v_age int;
begin
truncate table test;
insert into test values(1,'cs',40);
select name,age into v2,v3 from test where id = v1;
INSERT  INTO test (id,name,age)VALUES(2,'tom',12) RETURNING * INTO p1;
raise notice 'INSERT-RETURNING:%',p1;
INSERT  INTO test (id,name,age)VALUES(3,'hhdb',22) RETURNING name,age INTO v_name,v_age;
raise notice 'INSERT-RETURNING:%,%',v_name,v_age;
UPDATE test SET name = 'John'  WHERE id = 1 RETURNING * INTO p1;--超过一行会报错
raise notice 'UPDATE-RETURNING:%',p1;
DELETE FROM test WHERE id= 1 RETURNING * INTO p1;  --数组超过一行也会报错
raise notice 'DELETE-RETURNING:%',p1;
--DELETE FROM test WHERE id!= 1 RETURNING * INTO p2;  --数组超过一行也会报错
--DELETE FROM test WHERE id!= 1 RETURNING * INTO p3;  --数组超过一行也会报错
end
$$ language plpgsql;

函数调用:

select   (test_fun(1)).v2;   --默认返回值为record类型
select   (test_fun(1)).v3;  --默认返回值为record类型
select v2,v3 from test_fun(1);  --默认返回值为record类型
select * from test_fun(1);   --默认返回值为record类型

函数定义:与OUT参数返回值类型一致:

create or replace function test_fun(v1 int, v2 out varchar) as $$     --默认返回值为varchar类型,返回值类型可写可不写
begin
select name,age into v2 from test where id = v1;
end
$$ language plpgsql;

函数调用:

select   (test_fun(1)).v2;  ---非法调用,函数默认返回为varchar类型
select v2 from test_fun(1);
select * from test_fun(1)

函数定义:与OUT参数返回值类型一致:

create or replace function test_fun(v1 int, v2 out refcursor) as $$    --默认返回值为refcursor类型,返回值类型可写可不写
begin
open v2 for select name,age from test where id = v1;
end
$$ language plpgsql;

函数调用:

begin 
select * from test_fun(1);
fetch  all  in "<unnamed portal 2>";
end

函数定义:返回值类型为RECORD,里面包括游标复杂类型

create or replace function test_fun(v1 int,v2 out varchar, v3 out refcursor) as $$  --默认返回值为record类型,返回值类型可写可不写
begin
--open v3 for select name into v2   from test where id = v1; --此情况创建正常,调用出错,转成以下两个语句,同时into 多个变量PG不支持,oracle虽然支持,但是运行结果显示并没有将值INTO到指定的变量中
open v3 for select *  from test where id = v1;
select name into v2  from test where id = v1;
end
$$ language plpgsql;

函数调用:

begin;
select * from test_fun(1);
fetch  all  in "<unnamed portal 4>";
end;

二、存储过程

存储过程定义:

CREATE PROCEDURE triple(INOUT x int)
LANGUAGE plpgsql
AS $$
BEGIN
    x := x * 3;
END;
$$;

存储过程调用:

DO $$
DECLARE myvar int := 5;
BEGIN
  CALL triple(myvar);
  RAISE NOTICE 'myvar = %', myvar;  -- prints 15
END
$$;
postgresql存储过程基本语法 我是Lee,一枚数据开发,不定期更新一下博客,今天说下postgresql创建存储过程procedure的语法 阅读详情

相关推荐

POSTGRESQL——存储过程调试

尽管您提到不能使用 debug 模式,但如果是早期的文章所指的不便之处,现在可能已经有更成熟的插件可用,如。块中,我们捕获了这个异常,输出了详细的错误信息,并选择重新抛出异常让上层调用者能够感知和处理此错误。获取异常发生时的更多诊断信息,包括SQLSTATE、SQLERRM、行列号等。这样,当出现任何未预期的异常时,你可以获取到丰富的堆栈信息,帮助定位问题所在。小于等于0时,函数会抛出一个异常,并附带一条自定义错误信息。由于没有真正的断点机制,可以通过添加临时逻辑判断来进行模拟断点。

pumpkin84514的博客 2550

PostgreSQL的函数及存储过程的基本使用

postgre存储过程新手入门级教程。存储过程的基本结构和调用。存储过程变量赋值。存储过程if语句、for语句使用...

Mr_Door的博客 4万+

G11系列PG86诊断工具包.zip

PG86DIAG.zip是一个全面的诊断工具包,专为IT专业人员在调试和维护相关设备时使用。它集合了多种实用的诊断、监控和分析工具,以确保能够高效地定位和解决问题。PG86软件作为市场上的老牌产品,初版便具备了强大的诊断和调试能力。它的主要特点包括但不限于:诊断功能:提供了一套全面的诊断工具,能够覆盖多种常见硬件和软件问题。用户界面:为了满足不同技术层次用户的需求,初版PG86采用了直观的图形用户界面。硬件兼容性:支持当时市面上大多数主流硬件设备,确保了软件的广泛适用性。

weixin_33773084的博客 1293

pgsql:存储过程简单示例

以下介绍在navicat中如何创建pgsql的存储过程 一、创建 在左边菜单的函数-》新建函数,输入存储过程名字,会自动生成存储过程模板代码 此时直接保存,并点击运行,可以看到存储过程可以正常执行,不过此时我们没有写任何执行内容,定义的输出类型是void,所以输出结果也是空的。执行结果: 二、执行具体操作语句 以上语句保存后重新打开设计函数时,会自动重构语句,设计工具会自动添加一些语句比如COST 100,不影响我们的原执行语句。 以下添加入参和update语句,并把返回值修改为

奋斗鱼 1万+

【CAPL实用开发】--- 使用VN1640A测试Busoff快慢恢复

使用VN1640A测试Busoff快慢恢复,包含具体的CAPL代码实现。

LabVIEW、CAPL、python、车载以太网等学习分享,文章正在写 2094

ITK-snap进行分割区域标注、三维显示及改变显示颜色

在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进

u010409517的博客 2万+

PostgreSQL存储过程介绍

PG的从11版本支持存储过程,存储过程支持事物,所以在存储过程中可以commit,rollback事物,从oracle迁移存储过程也得到了更好的支持。 语法如下: create [or replace] procedure procedure_name(parameter_list) language plpgsql as $$ declare -- variable declaration begin -- stored procedure body end; $$ 可以看到和创建函数语法类似,但是参数

魂醉的一亩二分地 2533

Python处理高光谱数据#3 降维

基于Python的高光谱降维操作 高光谱数据:点击此处可下载 用到的库:matplotlib、scipy、spectral 主要内容:主成分分析(PCA)与线性判别(LDA) 欢迎有兴趣的朋友交流指点。最后,废话不多说直接上代码???? import matplotlib.pyplot as plt from scipy.io import loadmat import spectral as spy

qq_273058791的博客 6936

pg_partman项目:升级PostgreSQL后修复缺失存储过程的完整指南

在PostgreSQL数据库管理中,分区表是处理大规模数据的有效手段。pg_partman作为PostgreSQL生态中广受欢迎的分区管理扩展,能够简化分区表的创建和维护工作。然而,当PostgreSQL从较旧版本升级到11或更高版本时,用户可能会遇到pg_partman存储过程缺失的问题。本文将详细介绍这一问题的成因及解决方案。 ## 问题背景 PostgreSQL 11引入了一个重要变化:...

gitblog_00861的博客 1065

微信中调起支付宝支付

微信中调用支付宝支付,首先我们知道微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行网页支付或打开app支付。以下为详细唤起支付宝的步骤、业务代码以及相关页面图。 如有问题欢迎评论留言,看到定回复哦^_^\(^o^)/~ 一、微信中唤起支付宝,有几个步骤: 1、中间页引导用户在浏览器中打开去唤起支付宝。 2、浏览器中打开支付宝或app中打开支付宝。 3...

han_calligrapher的博客 2万+

Windows安装Pytorch3d

pytorch和pytorch3d版本对应关系如下:https://github.com/facebookresearch/pytorch3d/releasescuda和NVIDIA CUB版本对应关系如下:https://github.com/NVIDIA/cub/releases?page=1本人配置如下:GPU:1050TiCUDA:11.1python:3.8。

Snakewood的博客 4286

pg 事务 存储过程_你必须收藏的Greenplum常用pg_catalog监控语句

Greenplum把元数据保存在系统表中。在Greenplum的系统表里,用户可以找到关于集群状态的几乎所有信息。Greenplum资深用户小徐将在本文详细揭秘最常用的系统表信息。目录1.Greenplum 基本查询信息1.1Greenplum 常用查询1.2Greenplum 触发器,锁,类型等相关信息1.3Greenplum 故障检测相关的信息1.4Greenplum 分...

weixin_42401137的博客 2443

解锁RK1126与SC132GS摄像头适配密码:技术与代码全解析

本文详细介绍了瑞芯微RK1126芯片与SC132GS摄像头的适配方法。首先分析了RK1126的四核Cortex-A7处理器、Mali-T860 GPU等硬件特性,以及SC132GS的130万像素、全局快门等技术参数。重点阐述了基于MIPI CSI接口的硬件连接原理和基于V4L2框架的软件驱动设计,并提供了完整的初始化、数据采集和图像处理代码实现。针对常见连接和图像质量问题给出了解决方案,展现了该组合在智能安防、工业检测等领域的应用潜力,为开发者提供了实用的技术参考。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1502

oracle中存储过程与函数的区别是什么

在PL/SQL中还可以在declare块中建立本地存储过程,而不使用关键字create,其目的是:不用将存储过程存储在数据库中,避免更改数据库时带来的麻烦,其主要的使用场景是,临时使用某个存储过程,而不是在以后要重复多次使用。2).存储过程(procedure)不直接返回数据,但可以改变输出参数的值,这可以近似看作能返回值,且存储过程输出参数的值个数没有限制。1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。..

恒创科技Henghost 939

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1310

基于Python的车牌识别系统实现

本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 5万+

PostgreSQL JDBC驱动(pgjdbc)存储过程与函数调用指南

PostgreSQL JDBC驱动(pgjdbc)为Java应用程序提供了与PostgreSQL数据库交互的能力。本文将深入讲解如何使用该驱动调用PostgreSQL中的存储函数和存储过程,这是数据库开发中的核心技能之一。 ## 存储函数与存储过程的区别 PostgreSQL支持两种存储对象: 1. **存储函数(Functions)**:可以返回值,传统上用于计算和查询 2. **存储过程...

gitblog_00028的博客 567

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pg 事务 存储过程_PostgreSQL 11新特性解读|支持存储过程(SQL Stored Procedures)__PostgreSQL 11 版本一个重量级新特性是对存储过程的支持,同时支持存...

## 作者介绍**谭峰** 网名francs,中国开源软件推进联盟PostgreSQL分会特聘专家,《PostgreSQL实战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一,致力于PostgreSQL技术分享,博客 https://postgres.funPostgreSQL 11 版本一个重量级新特性是对存储过程的支持,同时支持存储过程嵌入事务,...

weixin_39957068的博客 345

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

postgres的存储过程与存储函数

16.存储过程管理 支持通过图形化方式创建、修改、删除和查看存储过程,支持存储过程的调用与运行 支持存储过程中游标的定义、打开、拨动、关闭 支持存储过程中使用动态SQL语句 命令行模式: 16.1无参存储过程 创建: create table t_p1 (id int,name varchar(20) ); create or replace procedure p_ins as begin for I in 1..100 loop insert into t_p1 values (i, 'abcd.

fuqiangnxn的博客 2268

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PostgreSQL 函数与存储过程(Function / Procedure)详解

摘要: PostgreSQL 的函数(Function)和存储过程(Procedure)是封装可重用 SQL 逻辑的核心组件。函数通过 CREATE FUNCTION 定义,必须声明返回类型(标量、多行或表),支持 SQL/PLpgSQL 等多种语言,常用于计算和查询封装。存储过程(PG 11+)使用 CREATE PROCEDURE,不直接返回值但支持 OUT 参数和内部事务控制(如 COMMIT/ROLLBACK),适用于批量操作和业务逻辑。关键区别:函数通过 SELECT 调用且可嵌套在 SQL 中,

csdn_tom_168的博客 1933

【Postgres】11、PROCEDURE 存储过程、FUNCTION 函数、使用方式和区别

在PostgreSQL中,存储过程(Procedure)和函数(Function)是两种可执行的数据库对象,它们之间有一些区别。总体来说,Function 功能更强大

呆呆的猫的博客 2935

PostgreSQL 11 新特性之存储过程

PostgreSQL 11 新特性之存储过程

weixin_44519342的博客 811

【PG内核】pg11秒级新增非空默认字段的实现方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33933118的博客 879

一个扩展如何兼容PostgreSQL 11到15五个版本?深入pg_pathman的pg_compat兼容层设计

pg_pathman 是一款广受欢迎的 PostgreSQL 分区工具(partitioning tool),它最惊艳的设计是 **pg_compat 兼容层**:仅用三个文件,就让同一套 C 源码在 **PostgreSQL 11、12、13、14、15 五个大版本**上无分支地编译运行,行为完全一致。这篇文章带你拆解这套跨版本兼容设计。 ## 📦 先认识 pg_pathman - **它

gitblog_00094的博客 803

Postgresql - plpgsql - 存储过程内提交

在PG11之后,出了一个新的功能,就是可以在存储过程内提交事务了。 方便了很多。 *这样的存储过程必须是一个procedure,不能是一个function,调用的时候,必须使用call,不能使用select 。 create or replace PROCEDURE test_insert_1117() as $$ DECLARE chars text[] := '{0,1,2,3,4,5,6...

chuckchen1222的博客 4635

postgre创建存储过程_别再说不知道什么是存储过程和存储函数了

| 作者:新一、| 简书:https://www.jianshu.com/u/b3263fc54bce| 微信公众号:1024笔记| GitHub:https://github.com/JangYt?tab=repositories| 博客地址:https://blog.youkuaiyun.com/qq_41153943今天项目需要写个存储过程,长时间没有写存储过程有点生疏和忘记了,所以想着写一篇文章来总结...

weixin_36180912的博客 1271
上一篇: Oracle函数与存储过程相互嵌套声明
下一篇: Postgresql11分区索引
codepeter
博客等级 码龄6年 11粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值