数据库之函数、存储过程

函数、存储过程

1.函数

函数,常用于对一个或多个输入参数进行操作,主要目的是返回一个结果值,就是一种方法,在postgre里存放的位置叫function,比如创建一个计算长方面积的函数。

举例:建立一个计算长方形面积的函数,代码如下

create or replace function area_of_rectangle(lenth integer,height integer)--声明函数名及需要的参数,(变量名1 变量类型 , 变量名2 变量类型,…)
returns integer as  --returns,注意有s奥
$$
declare                  --表示声明变量area integer := 0;   --函数赋值初始化,用:=
beginarea := lenth * height;return area;           --函数要写返回值
end
$$
language 'plpgsql';   --固定

调用函数:

select area_of_rectangle(5,9);

结果截图:
请添加图片描述

2.存储结构

存储过程通常包含一系列的SQL语句或其他代码块,主要目的是执行一系列的操作,跟函数差不多,但是它不能用在select后边,不能用于sql语句,不需要返回值,一定要有的话需要用OUT关键字,具体功能我也不太清楚,我觉得用函数更方便。

举例代码如下:

一个求长方体体积的存储过程。

CREATE PROCEDURE volume_of_cuboid(lenth integer,width integer,height integer, OUT volume integer)
LANGUAGE plpgsql AS--跟函数的区别,他的这个LANGUAGE写上边了
$$
DECLAREarea integer := 0;
BEGINarea := lenth * width;volume := area * height;
END;
$$

调用存储过程

CALL volume_of_cuboid(10, 20, 30 total);
-- 或
SELECT * FROM volume_of_cuboid(10, 20, 30);

存储过程的变量类型:

存储过程中,对变量赋值需要两个值类型一致,如经常碰到bigint类型值赋值到integer变量中,导致运行报错。常用类型如下:
在这里插入图片描述

3.基本流程语句

3.1 if语句:

IF ... THEN ... END IF;
IF ... THEN ... ELSE ... END IF;
IF ... THEN ... ELSE ... THEN ... ELSE ... END IF;
--例:
if student_name = '张静' thenRAISE NOTICE '我是张静';
else if student_name like '%李%' thenRAISE NOTICE '我姓李';
elseRAISE NOTICE '我不是张静,也不姓李';
end if;

3.2 case语句:

CASE ... WHEN ... THEN ... ELSE ... END CASE;
CASE WHEN ... THEN ... ELSE ... END CASE;
--例:
case student_name when '张静','晓静' thenRAISE NOTICE '张静和晓静都是我的名称';
else RAISE NOTICE '你叫错名字了';
end case;
--例:
case when student_name = '张静' or student_name = '晓静' thenRAISE NOTICE '张静和晓静都是我的名称';
elseRAISE NOTICE '你叫错名字了';
end case;

这个例子用select之后会报错,我明天问问我🐕头师父看看怎么事再做修改

2024年5月28日整明白了

举例代码如下:

CREATE OR REPLACE FUNCTION qufen(name VARCHAR)
returns VARCHAR as
$$
DECLARE
notice VARCHAR ;
BEGIN CASE name WHEN '张静','晓静' THENnotice := '张静和晓静都是我的名称';ELSEnotice :=  '你叫错名字了';END case;RETURN notice;END 
$$
LANGUAGE 'plpgsql';

首先最上边理论部分只是简单说了一下形式,实际上当我真正敲代码的时候发现这个代码我写完之后,也套在函数的形式里边了,然后输出的时候,无论我输出哪个人名都是返回的是0,并且前面messa中写 ‘你叫错名字了’。我就很疑惑,然后今天讲解之后发现,首先不能用RAISE NOTICE,用notice才对,通过不同的输入情况给notice赋值,然后我缺少返回值,应该最后返回notice,就能达成根据输入的不同形成输出 ‘张静和晓静都是我的名称’ '你叫错名字了’这两句话,这回调整之后就对了

3.3 2.循环

(1)简单循环 中括号为可选项

[ <<label>> ]
LOOP循环体语句;EXIT [ label ] [ WHEN 判断条件表达式 ];
END LOOP [ label ];--例-计算1到100的和:
sum := 0;
i := 0;
loopi := i + 1;sum := sum + i;exit when i = 100 ;
end loop;
RAISE NOTOCE '1到100的和为:%',sum;

2024年5月27日这个也有问题,我怎么才能不设置参数直接运行呢?

2024年5月28日这个今天也整明白了,见我下边代码

CREATE OR REPLACE FUNCTION yidaoyibaidehe()
returns INTEGER as
$$
DECLARE
sum INTEGER;
i INTEGER;
BEGIN
sum := 0;
i := 0;
loopi := i + 1;sum := sum + i;exit when i = 100 ;
end loop;
RAISE notice '1到100的和为:%',sum;
return sum;
END
$$
LANGUAGE 'plpgsql';

首先,我的函数名后边留个空括号,就是代表不用入参的意思,然后方法体里边因为有sum和i,这两个比不能直接用,得先在declare后边声明一下才能用,所以才会有我昨天的报错“sum和i未声明或者未定义”,就差declare后边声明这一步了,敲里哇,雾我大半宿

(2)for循环

[ <<label>> ]
FOR 循环控制变量 IN [ REVERSE ] 循环范围 [ BY expression ] LOOP循环体语句;
END LOOP [ label ];--计算1到100的和:
--例1 - 循环执行过程类似于:for(i=1;i<=100;i++){}
sum := 0;
for i in 1..100 loopsum := sum + i;
end loop;
RAISE NOTOCE '1到100的和为:%',sum;--例2 - 循环执行过程类似于:for(i=100;i>=1;i--){}
sum := 0;
for i in REVERSE 100..1 loopsum := sum + i;
end loop;
RAISE NOTOCE '1到100的和为:%',sum;--计算1到100之间所有奇数的和
--例3 - 循环执行过程类似于:for(i=1;i<=100;i=i+2){}
sum := 0;
for i in 1..100 by 2 loopsum := sum + i;
end loop;
RAISE NOTOCE '1到100的和为:%',sum;

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

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

相关文章

基于GTX 8B10B编码的自定义PHY接收模块(高速收发器十三)

点击进入高速收发器系列文章导航界面 前文完成了发送模块的设计&#xff0c;本文接着完成接收模块的设计&#xff0c;接收模块相对发送模块会更加麻烦。 1、设计思路 前文在讲解官方示例工程时&#xff0c;提到GTX IP的接收部分没有做字对齐&#xff0c;需要用户自己编写字对齐…

---初始Linux---

一、认识计算机 计算机 硬件 软件 硬件&#xff1a;就是计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称&#xff08;CPU\GPU\...&#xff09; 软件&#xff1a;是用户和计算机硬件之间及进行交流的工具 然而一个简单的计算机或者说基本的计算机就是有两大…

Android开机动画,framework修改Bootanimation绘制文字。

文章目录 Android开机动画&#xff0c;framework修改Bootanimation动画绘制文字。 Android开机动画&#xff0c;framework修改Bootanimation动画绘制文字。 frameworks/base/cmds/bootanimation/bootanimation.cpp 绘制时间的一个方法 // We render 12 or 24 hour time. void…

Linux 僵尸进程和孤儿进程

一.Z(zombie)-僵尸进程 1.僵死状态&#xff08;Zombies&#xff09;是一个比较特殊的状态。当进程退出并且父进程&#xff08;使用wait()系统调用后&#xff09;没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 2.僵死进程会以终止状态保持在进程表中&#xff0c;并且会…

Spring 中如何控制 Bean 的加载顺序?

如果你脱口而出说添加 Order 注解或者是实现 Ordered 接口&#xff0c;那么恭喜&#xff0c;你掉坑了。 一 Order 注解和 Ordered 接口 在 Spring 框架中&#xff0c;Order 是一个非常实用的元注解&#xff0c;它位于 spring-core 包下&#xff0c;主要用于控制某些特定上下文…

SQL实验 带函数查询和综合查询

一、实验目的 1&#xff0e;掌握Management Studio的使用。 2&#xff0e;掌握带函数查询和综合查询的使用。 二、实验内容及要求 1&#xff0e;统计年龄大于30岁的学生的人数。 --统计年龄大于30岁的学生的人数。SELECT COUNT(*) AS 人数FROM StudentWHERE (datepart(yea…

小公司的软件开发IT工具箱

目录 工具链困境 难题的解决 达到的效果 资源要求低 工具箱一览 1、代码管理工具 2、自动化发版&#xff08;测试&#xff09;工具 3、依赖库&#xff08;制品包&#xff09;管理 4、镜像管理 5、授权管理&#xff08;可选&#xff09; 待讨论&#xff1a;为什么不是…

基于全志T507-H的Linux-RT实时性测试案例分享

本文将为各位工程师演示全志T507-H工业评估板&#xff08;TLT507-EVM&#xff09;基于IgH EtherCAT控制伺服电机方法&#xff0c;生动说明Linux-RT Igh EtherCAT的强大之处&#xff01; Linux-RT系统的优势 内核开源、免费、功能完善。 RT PREEMPT补丁&#xff0c;使Linux内…

【Qt】对话框

文章目录 1 :peach:对话框介绍:peach:2 :peach:对话框的分类:peach:2.1 :apple:模态对话框:apple:2.2 :apple:非模态对话框:apple:2.3 :apple:混合属性对话框:apple: 3 :peach:Qt 内置对话框:peach:3.1 :apple:消息对话框 QMessageBox:apple: 1 &#x1f351;对话框介绍&#x…

AK F.*ing leetcode 流浪计划之费马小定理与组合数取模

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 费马小定理与证明 参考 https://zhuanlan.zhihu.com/p/594859227 费马小定理&#xff1a;如果p是一个质数&#xff0c;而正整数a不是p的倍数&#xff0c;那么a(p-1)≡…

LabVIEW齿轮调制故障检测系统

LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统&#xff0c;实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力&#xff0c;结合Hilbert包络解调技术&#xff0c;对齿轮的振动信号进行精确分析…

opensips 3.5的DB部署

opensips 3.X的DB部署方式较之前版本有很大的不同。本文以opensips 3.5 为例&#xff0c;说明部署的过程。 当OpenSIPS安装完成后&#xff0c;需要进一步做什么&#xff1f;最大的可能就是部署配套的DB。因为很多功能离不开它&#xff0c;比如用户鉴权、注册信息持久化、dialog…

MySQL学习——影响选项文件处理的命令行选项和程序选项修改器

大多数支持选项文件的MySQL程序都处理以下选项。因为这些选项会影响选项文件的处理&#xff0c;所以必须在命令行上给出&#xff0c;而不是在选项文件中给出。为了正常工作&#xff0c;这些选项中的每一个都必须先于其他选项给出&#xff0c;但以下情况除外&#xff1a; -prin…

OpenCASCADE开发指南<十四>:OCCT建模类之BRepPrimAPI_MakePipe创建管道

1、OpenCasCade拓扑几何 在Open CASCADE Technology (OCCT) 中,除了基本三维几何体建模类BRepBuilderAPI外,还提供了复杂模型的建模类,常用的有如下几种,他们可以单独使用或相互组合,通过OCCT提供的融合函数进行组装。例如:BRepOffsetAPI_ThruSections、BRepOffsetAPI_Ma…

sqlite基本操作

简介 文章目录 简介1.数据库的安装2.数据库命令&#xff1a;API&#xff0c;创建表单代码 csprintf&#xff08;&#xff09;getchar和scanf&#xff08;&#xff09; 1.数据库的安装 sudo dpkg -i *.deb这个报错表明出现依赖问题 用这个命令后再试试sudo apt --fix-broken in…

Docker是什么?使用场景作用及Docker的安装和启动详解

目录 Docker是什么&#xff1f; Docker的发展 Docker的安装 Docker使用 Docker的运行机制 第一个Docker容器 进入Docker容器 客户机访问容器 Docker是什么&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker …

ChatGPT的基本原理是什么?又该如何提高其准确性?

在深入探索如何提升ChatGPT的准确性之前&#xff0c;让我们先来了解一下它的工作原理吧。ChatGPT是一种基于深度学习的自然语言生成模型&#xff0c;它通过预训练和微调两个关键步骤来学习和理解自然语言。 在预训练阶段&#xff0c;ChatGPT会接触到大规模的文本数据集&#x…

绘画参数配置及使用

绘画参数配置及使用 路径&#xff1a;站点后台-功能-AI绘画 进入参数配置 接口选择&#xff1a;多种接口自主选择&#xff08;需自己准备key&#xff09;&#xff0c;对应接口的key对话和绘画通用 存储空间&#xff1a; 位置在超管后台-存储空间 自主选择存储&#xff08;需…

冯喜运:6.3周一黄金原油行情分析及操作建议

【黄金消息面分析】&#xff1a;上周行情概述&#xff1a;现货黄金上周&#xff08;0527-0531&#xff09;反弹上探&#xff0c;5月27号开盘前本人曾提醒关注反弹&#xff0c;较当时上涨约30美元&#xff0c;最高至2364一线&#xff0c;其后震荡下跌。周线小幅收跌0.27%&#x…

微服务:Rabbitmq的WorkQueue模型的使用、默认消费方式(消息队列中间件)

文章目录 WorkQueue模型控制预取消息个数 WorkQueue模型 当然&#xff0c;一个队列&#xff0c;可以由多个消费者去监听。 来实现一下. 生产者&#xff1a; Testpublic void testWorkQueue() throws InterruptedException {// 队列名称String queueName "simple.queue…