13.postgresql--函数

文章目录

  • 标量示例
  • 复合示例
  • 有返回值
  • 函数返回void
  • RETURN NEXT ,RETURN QUERY
  • RETURN EXECUTE
  • IF THEN END IF
  • FOREACH,LOOP
  • SLICE

(1)如果函数返回一个标量类型,表达式结果将自动转行成函数的返回类型。但要返回一个复合(行)值,必须写一个所需列集合的表达式。

标量示例

create or replace function fn_scalar() returns numeric as 
$$
declare 
begin return (3+4*2)-(2*2-1);
end
$$
language plpgsql
select * from fn_scalar();

在这里插入图片描述

select * from fn_scalar() as cnt

在这里插入图片描述

复合示例

create or replace function fn_scalars() returns record as 
$$
declare 
begin return (1,2,'hello world'::text);
end
$$
language plpgsqlselect * from fn_scalars() as (no1 int,no2 int,msg text);

在这里插入图片描述

(2)如果声明带输出参数的函数,只需要写不带表达式的RETURN,输出参数变量的当前值被返回

有返回值

create or replace function fn_out_return(out rcd text) returns text as 
$$
declare 
begin select name into rcd from product where id = 1 ;
end$$
language plpgsqlselect * from fn_out_return ()

在这里插入图片描述

函数返回void

如果声明函数返回void,RETURN可以用来提前结果函数,但函数最后不要写RETURN

create or replace function fn_void_return() returns void as 
$$
declare 
begin raise notice '执行第一行....';raise notice '执行第二行....';
return;raise notice '执行第三行....';
end$$ 
language plpgsqlselect * from fn_void_return() 

执行第一行…
执行第二行…

RETURN NEXT ,RETURN QUERY

当函数被声明为返回returns setof sometype,规则和直接return sometype有所不同。这种情况下,返回的个体项被RETURN NEXT或者RETURN QUERY 命令序列指定,并接着会用一个不带参数的RETURN命令来指示这个函数已经完成执行。

(1)RETURN NEXT可以返回标量和复合类型,对于复合类型,将返回一个完整的结果“表”(结果集)。

create or replace function fn_return_nexts() returns setof product as 
$$
declare 
r product%rowtype;
begin for r in select * from productloopraise notice 'name is :%',r.name;return next r;end loop;
return;
end$$
language plpgsqlselect * from fn_return_nexts()

name is :diam
name is :vestibulum aliquet
name is :lacinia erat
name is :scelerisque quam turpis
name is :justo lacinia
name is :ultrices mattis odio
name is :hendrerit
name is :in hac habitasse
name is :orci eget orci
name is :pellentesque
name is :sit amet nunc
name is :sed vestibulum
name is :turpis eget
name is :cursus vestibulum
name is :orci nullam
name is :est quam pharetra
name is :posuere
name is :ligula
name is :convallis
name is :nulla elit ac

在这里插入图片描述

(2)RETURN QUERY 将执行一个查询的结果追加到一个函数结果中。

create or replace function fn_return_query() returns setof product as 
$$
declare 
r record;
begin return query(select * from product);end$$
language plpgsqlselect * from fn_return_query()

返回结果同上所示

RETURN EXECUTE

create or replace function fn_query_execute(v_name varchar) returns setof product as 
$$
declare 
_sql text;
begin _sql := 'select * from product where name like '''|| v_name || '%'';';raise notice 'sql====%',_sql;
return query execute _sql;
end$$ 
language plpgsqlselect * from fn_query_execute('s')

sql====select * from product where name like ‘s%’;

在这里插入图片描述

IF THEN END IF

create or replace function fn_if_else(uid int) returns text as
$$
declare
v_value text;
begin
if uid = 1 then
v_value='参数值为1';
else
v_value='参数值不为1';
end if;
return v_value;
end 
$$
language plpgsql

FOREACH,LOOP

https://blog.csdn.net/qq_39727113/article/details/115756087

SLICE

create or replace function fn_foreach(int[]) returns void as 
$$
declare 
x int;
begin foreach x slice 0 in array $1loop raise notice '输出value=%',x;	end loop;end$$
language plpgsql

select * from fn_foreach(array[[1,2,3],[4,5,6]]);
输出value=1
输出value=2
输出value=3
输出value=4
输出value=5
输出value=6

select * from fn_foreach(array[1,2,3])
输出value=1
输出value=2
输出value=3

create or replace function fn_foreach(int[]) returns void as 
$$
declare 
x int[];
begin foreach x slice 2 in array $1loop raise notice '输出value=%',x;	end loop;end$$
language plpgsqlselect * from fn_foreach(array[[1,2,3],[4,5,6]]);
输出value={{1,2,3},{4,5,6}}

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

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

相关文章

Windows沙盒的安装与配置

沙盒安装 1、打开控制面板 2、选择程序与功能 3、勾选Windows 沙盒,然后点击确定,等待安装完成即可。 沙盒配置 Windows 沙盒支持简单的配置文件,这些文件为沙盒提供最少的自定义参数集。 此功能可与 Windows 10 内部版本 18342 或 Windows…

使用selenium模拟登录解决滑块验证问题

目录 1.登录入口 2.点击“账号密码登录” 3.输入账号、密码并点击登录 4.滑块验证过程 5.小结 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录&#x…

python pytest脚本执行工具

pytest脚本执行工具 支持获取当前路径下所有.py脚本 添加多个脚本,一起执行 import tkinter as tk from tkinter import filedialog import subprocess import os from datetime import datetimedef select_script():script_path filedialog.askopenfilename(fil…

windows安装使用 tesseract-ocr

OCR(Optical character recognition,光学字符识别)是一种将图像中的手写字或者印刷文本转换为机器编码文本的技术。 tesseract-ocr 是由Google开发,支持100多种语言 文档 tessdoc: https://tesseract-ocr.github.io…

浅谈炼钢厂能源计量管理系统的设计与应用

安科瑞 华楠 摘要: 从能源计量和管理的角度,论述了炼钢厂的能源计量管理系统的基本组成及功能。该系统的建立,将使炼钢厂能源介质的计量管理工作实现自动采集、瞬时监测、故障报警、能流监视;完成报表统计、离线输入、成本分析、预测参考等功…

【Java项目实战-牛客社区】--idea创建springboot工程

①. 创建springboot工程,并勾选web开发相关依赖。 。配置Maven ②. 定义Controller类,添加方法 hello。 ③. 运行测试1 使用Spring Initializr方式构建Spring Boot项目 Spring Initializr是一个Web应用,它提供了一个基本的项目结构&#xff…

手机外壳缺陷视觉检测软硬件方案

单独使用一种光源效果图 同轴光会出现亮度不够的情况;回形面光因为光源中间的圆孔会使图像有阴影,造成图像效果不均衡,所以不采用单独光源打光 使用同轴回形面光源效果图 回形光源照亮产品要寻找的边缘,同轴光源起到补光的作用&a…

SpringCloud学习路线(6)—— 远程调用HTTP客户端Feign

一、Feign替代RestTemplate RestTemplate示例 String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class);RestTemplate的缺陷: 代码可读性差,编码体验不统一。参数复杂URL难以维…

需求分析案例:全局错误码设计

本文介绍了我在一些业务系统中遇到的错误提示问题,以及进行需求分析和设计实现的过程,欢迎进行交流和指点,一起进步。 1、需求起源 作为程序员,或多或少,都经历过如下场景: 场景1: 产品经理&a…

智慧校园能源管控系统

智慧校园能源管控系统是一种搭载了物联网技术、大数据技术、大数据等技术性智能化能源管理方法系统,致力于为学校提供更高效、安全性、可信赖的能源供应管理和服务。该系统包括了校内的电力工程、水、气、暖等各类能源,根据对能源的实时检测、数据统计分…

文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题

文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题 二、试说明 MAX-HEAP-INSERT(A,10)在堆A(15,13,9,5,12,8,7,4,0,6&#xf…

【业务功能篇48】后端接口开发的统一规范

业务背景:日常工作中,我们开发接口时,一般都会涉及到参数校验、异常处理、封装结果返回等处理。而我们项目有时为了快速迭代,在这方面上有所疏忽,后续导致代码维护比较难,不同的开发人员的不同习惯&#xf…

HTTP进化史:从HTTP1的简单到HTTP3的强大

文章目录 📈I. HTTP1⚡A. 基本特点⚡B. 特点⚡C. 优缺点 📈II. HTTP2⚡A. 基本特点⚡B. 特点⚡C. 优缺点 📈III. HTTP3⚡A. 基本特点⚡B. 特点⚡C. 优缺点 📈IV. 总结📈附录:「简历必备」前后端实战项目&am…

[RK3568] AMP架构

Rockchip 平台异构多系统 AMP(非对称多核架构)的开发软件包,支持 Linux(Kernel-4.19)、 Baremetal(HAL)、RTOS(RT-Thread) 组合AMP构建形式。 Baremetal(HAL) Baremetal表示裸机操作系统,HAL是裸机操作系统的一种。 裸机嵌入式系…

MySQL不适合创建索引的7种情况

1. 在where中使用不到的字段,不要设置索引 WHERE条件(包括order by ,group by) 2. 数据量小的表最好不要使用索引 表记录太少,比如少于1000个,创建索引会先查索引,再回表,查询花费…

Git 常用命令

Git操作 克隆远程仓库到本地 # Git初始化&#xff08;仅一次使用的适合需要设置&#xff09; git config --global user.name "用户名" git config --global user.email "邮箱账号"# 朴实无华的拉取 git clone <url>分支 # 查看分支 git branch # …

Puppeteer 使用教程-实战篇(爬取图片、视频、音频,页面数据)

目录 前言 一、 获取实体店铺信息 二、 获取全国各省市县地图json数据 三、 cookies 四、 获取网络图片、视频资源 五、 自动化测试 总结 前言 续上篇&#xff0c;我们简单讲述一下puppeteer常见的应用场景&#xff0c;包括静态页面数据获取&#xff0c;网络请求获取截取…

第 5 章 Spark Shuffle 解析

第 5 章 Spark Shuffle 解析 5.1 Shuffle 的核心要点1. 数据分区&#xff1a;2.数据传输&#xff1a;3. 数据排序&#xff1a;4.数据聚合&#xff1a;5. 数据重分发&#xff1a;6.数据持久化&#xff1a;5.1.1 ShuffleMapStage 与 ResultStage 5.2 HashShuffle 解析5.2.1 未优化…

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架&#xff0c;它允许开发人员使用多种编程语言&#xff08;包括Python&#xff09;来编写自动化测试脚本。Appium框架提供了一套API和工具&#xff0c;可以与移动设备进…

基于单片机语音识别智能家居系统的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;液晶显示当前环境温湿度&#xff0c;用电器开关状态通过语音模块识别设定的语音&#xff1b;DHT11进行环境温湿度采集&#xff1b;通过语音播报模块报当前温湿度&#xff0c;智能回复通过语音识别可以打开灯&#xff0c;窗帘&am…